我正在试图弄清楚如何设置一些环境变量,这将使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
尽管阅读过类似主题的大量文章和帖子,但我还没有找到解决方案。
答案 0 :(得分:14)
作为GCC手册says,LIBRARY_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'创建文件后,将强制它更新缓存。