根据g++ -print-search-dirs
我的C ++编译器正在search许多目录中的库,包括…
/lib/../lib/
地说, /lib/
/lib/../lib/
/lib/
看起来和/lib/
相同,lib的父节点有一个名为lib的子节点,“那个人的父亲的儿子就是我父亲的儿子的儿子”等等。 /usr/lib/../lib/
和/usr/lib/
是否有一些原因,可能与符号链接有关,g ++应该configuration为同时search/lib/../lib/
和/lib/
?
如果这是不必要的冗余,那么如何解决呢?
如果重要的话,这是在Ubuntu 9.04的未经修改的安装。
编辑:更多信息。
结果是从bash shell执行g++ -print-search-dirs
而没有其他开关。
printenv
不输出LIBRARY_PATH和LPATH, echo $LPATH
和echo LIBRARY_PATH
返回空行。
一个答案的尝试(我从几分钟的时间看gcc.c
驱动程序源和Makefile环境)。
这些路径是在运行时从
GCC_EXEC_PREFIX
上的GCC文档 ) $LIBRARY_PATH
环境变量 $LPATH
环境变量(对待$LIBRARY_PATH
) -B
命令行开关的值 最后一个(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 # ie 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_PATH
, LPATH
)
那么理论上,如果/ lib是/ drive2 / foo的符号链接,那么/lib/../lib会指向/ drive2 / lib,如果我没有弄错的话。 理论上…
编辑:我刚刚测试,情况并非如此 – 它回到/ lib。 Hrm 🙁