【发布时间】:2013-03-28 00:22:45
【问题描述】:
我正在尝试弄清楚如何设置一些环境变量,以使 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
尽管阅读了许多类似主题的文章和帖子,但我还没有找到解决方案。
【问题讨论】:
-
您是否尝试过在运行 g++ 之前设置 + 导出 LD_LIBRARY_PATH(而不是在 g++ 命令行上提供)?
-
我已经尝试在运行 g++ 之前同时导出 LIBRARY_PATH 和 LD_LIBRARY_PATH。
-
@FrankSchmitt,将其设置为 OP 的方式与导出它具有相同的效果(但仅限于该命令及其子命令),因此无济于事
-
可能相同,除了没有提到
LIBRARY_PATH不起作用:stackoverflow.com/questions/2726993/… 您可能还想查看规范文件:stackoverflow.com/a/7505529/895245 -
我想知道您是否在编译二进制文件的同一系统上运行时链接期间遇到问题。 -L 选项不会阻止链接器在运行时先链接系统库。 -rpath 对你来说似乎是更好的选择。