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

Reg*_*gel 21 linker gcc g++ ld

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

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

命令:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib
Run Code Online (Sandbox Code Playgroud)

正确链接程序.但是,我希望将其设置为链接器的第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
Run Code Online (Sandbox Code Playgroud)

$ 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
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ely 17

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

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

我不知道有什么办法让目录LIBRARY_PATH先进入,我认为你必须使用-L它.

  • 为什么这是公认的答案?它没有回答这个问题. (6认同)
  • 答案是不正确的。Ubuntu 中的标准 gcc 安装将 LIBRARY_PATH 放在第一位。如果你自己编译 gcc,LIBRARY_PATH 会排在最后。 (2认同)