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/
/lib/./lib/
和/lib/
g++-print search dirs
库路径和LPATH都不是从
printenv
输出的,而且echo$LPATH
和echo LIBRARY\u路径
都返回空行。理论上,如果/lib是/drive2/foo的符号链接,那么如果我没有弄错的话,/lib/./lib将指向/drive2/lib。理论上
编辑:我刚刚测试过,但不是这样-它返回到/lib。Hrm:(试图找到答案(我从查看gcc.c
驱动程序源代码和Makefile环境的几分钟中收集到)
这些路径在运行时从以下位置构造:
GCC\u exec\u前缀
)$LIBRARY\u路径
环境变量$LPATH
环境变量(被视为$LIBRARY\u PATH
)-B
命令行开关的任何值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++源代码会随着这个谜团的解决而终止;感谢提供线索。