GCC默认情况下如何在默认链接器搜索路径之前添加? LIBRARY_PATH无法正常工作

时间:2013-04-05 14:24:40

标签: gcc linker g++ ld

我正在试图弄清楚如何设置一些环境变量,这将使g ++链接到正确版本的库。

我在/ usr / lib64中有一些旧的boost库(链接这些将失败)和/ v / users / regel / lib中的新库。因此链接器应链接到新库。

命令:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib

正确链接程序。但是,我希望将其设置为链接器的第1个搜索目录,这样我每次链接时都不必指定“-L”。

以下环境变量似乎无法解决问题:

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system
/tmp/regel/cc4SmBtI.o: In function `main':
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system
/tmp/regel/ccUreBZy.o: In function `main':
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status

尽管阅读过类似主题的大量文章和帖子,但我还没有找到解决方案。

2 个答案:

答案 0 :(得分:14)

作为GCC手册saysLIBRARY_PATH是将目录添加到库搜索路径的正确环境变量。

如果您向-v命令添加g++,您应该会看到它使用的LIBRARY_PATH,您应该看到它包含您指定的目录,并且它已添加到collect2命令为-L,但您会看到标准目录之后添加,如-L/usr/lib等。

我不知道如何让LIBRARY_PATH中的目录排在第一位,我认为你必须使用-L

答案 1 :(得分:-1)

尝试在/etc/ld.so.conf.d /

中的.conf文件中指定库路径

链接器在链接时查看/etc/ld.so.conf.d/中文件中指定的路径。

确保您运行' ldconfig'创建文件后,将强制它更新缓存。