Linux g++;搜索/lib/。/lib/,然后搜索/lib// < >根据 g++-打印搜索DRIs >我的C++编译器正在搜索目录中的许多库,包括…< /P> /lib/。/lib/: /usr/lib/。/lib/: /lib/: /usr/lib/

Linux g++;搜索/lib/。/lib/,然后搜索/lib// < >根据 g++-打印搜索DRIs >我的C++编译器正在搜索目录中的许多库,包括…< /P> /lib/。/lib/: /usr/lib/。/lib/: /lib/: /usr/lib/,linux,g++,ubuntu-9.04,Linux,G++,Ubuntu 9.04,天真地说,/lib/./lib/似乎与/lib/是同一个目录-lib的父母将有一个名为lib的孩子,“那个人的父亲的儿子是我父亲的儿子”等等。这同样适用于/usr/lib/./lib/和/usr/lib/ 是否有某种原因,可能与符号链接有关,g++应该被配置为同时搜索/lib/./lib/和/lib/ 如果这是不必要的冗余,如何着手解决它 如果有必要的话,这是在未经修改的Ubuntu 9.04安装上观察到的 编辑:更多信息 结果来自于在没有其他开关的情况下从bash shell执行g++-pri

天真地说,
/lib/./lib/
似乎与
/lib/
是同一个目录-lib的父母将有一个名为lib的孩子,“那个人的父亲的儿子是我父亲的儿子”等等。这同样适用于
/usr/lib/./lib/
/usr/lib/

  • 是否有某种原因,可能与符号链接有关,g++应该被配置为同时搜索
    /lib/./lib/
    /lib/

  • 如果这是不必要的冗余,如何着手解决它

  • 如果有必要的话,这是在未经修改的Ubuntu 9.04安装上观察到的

    编辑:更多信息

    结果来自于在没有其他开关的情况下从bash shell执行
    g++-print search dirs


    库路径和LPATH都不是从
    printenv
    输出的,而且
    echo$LPATH
    echo LIBRARY\u路径
    都返回空行。

    理论上,如果/lib是/drive2/foo的符号链接,那么如果我没有弄错的话,/lib/./lib将指向/drive2/lib。理论上

    编辑:我刚刚测试过,但不是这样-它返回到/lib。Hrm:(

    试图找到答案(我从查看
    gcc.c
    驱动程序源代码和Makefile环境的几分钟中收集到)

    这些路径在运行时从以下位置构造:

  • GCC exec前缀(请参见
    GCC\u exec\u前缀
  • $LIBRARY\u路径
    环境变量
  • $LPATH
    环境变量(被视为
    $LIBRARY\u PATH
  • 传递给
    -B
    命令行开关的任何值
  • 标准可执行前缀(在编译期间指定)
  • Tooldir前缀
  • 最后一个(tooldir前缀)通常定义为相对路径: 从gcc的
    Makefile.in

    # Directory in which the compiler finds libraries etc.
    libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(version)
    # Directory in which the compiler finds executables
    libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(version)
    # Used to produce a relative $(gcc_tooldir) in gcc.o
    unlibsubdir = ../../..
    ....
    # These go as compilation flags, so they define the tooldir base prefix
    # as ../../../../, and the one of the library search prefixes as ../../../
    # These get PREFIX appended, and then machine for which gcc is built
    # i.e i484-linux-gnu, to get something like: 
    # /usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../i486-linux-gnu/lib/../lib/
    DRIVER_DEFINES = \
    -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \
    -DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\" \
    

    但是,这些是编译器版本特定的路径。您的示例可能会受到我上面列出的环境变量的影响(
    LIBRARY\u PATH
    LPATH

    一个好问题-你应该看看我的MinGW库路径是什么样子,我不知道为什么!@ASk,我在环境(bash)中检查了库路径和LPATH,两者都没有定义。应该保证跟踪g++源代码会随着这个谜团的解决而终止;感谢提供线索。