29

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

我在 /usr/lib64 中有一些旧的 bo​​ost 库(链接这些库会失败),在 /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

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

4

2 回答 2

23

正如 GCC 手册所说LIBRARY_PATH是将目录添加到库搜索路径的正确环境变量。

如果您添加-vg++命令中,您应该看到LIBRARY_PATH它使用的,并且您应该看到它包含您指定的目录,并且它被添加到collect2命令中-L,但是您会看到它在标准目录之后添加,例如-L/usr/libetc .

我不知道有什么方法可以让目录LIBRARY_PATH放在第一位,我认为你必须使用-L它。

于 2015-03-17T13:42:47.760 回答
0

尝试在 /etc/ld.so.conf.d/ 中的 .conf 文件中指定库路径

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

确保在创建文件后运行“ldconfig”,这将强制它更新其缓存。

于 2014-08-04T19:27:22.603 回答