【问题标题】:Circumvent ld lookup绕过ld查找
【发布时间】:2025-12-08 09:35:01
【问题描述】:

将我的工具链安装在与其供应商要求不同的目录后,我一直在运行一些较小的问题,通过适当地设置 COMPILER_PATH、C_INCLUDE_PATH、CPLUS_INCLUDE_PATH 和 LIBRARY_PATH 变量可以轻松解决。

但是,有一个问题我似乎无法轻易回避:

beo-it@bsrv01:/tmp/async$ xscale-linux-g++ -fPIC -DBOOST_ASIO_DISABLE_EPOLL -I/var/lib/c++/boost/boost_1_48_0/target/arm-linux-4.4.2/include -oasync main.cpp -L/var/lib/c++/boost/boost_1_48_0/target/arm-linux-4.4.2/lib/static -pthread -lboost_system -lboost_thread
/var/toolchains/arm-linux/4.4.2/arm-linux-4.4.2/arm-linux/bin/ld: cannot find /usr/local/arm-linux-4.4.2/lib/be/libpthread.so.0
collect2: ld returned 1 exit status

我不确定为什么ld 会通过绝对路径查找库,但这似乎正是这里的情况。有什么办法可以规避这种行为并为其提供正确的共享库路径?

【问题讨论】:

  • 您检查过您的ldconfig 设置了吗?也许它在那里并且仍然卡在缓存中。参考man ldconfig

标签: c++ gcc shared-libraries ld search-path


【解决方案1】:

我唯一能想到的是将符号链接放在它实际看起来的位置,但将其指向正确的文件。

【讨论】:

  • 感谢您的回复。不幸的是,这当然正是我想在这里避免的。我将工具链安装在不同的目录中,因为我的一些工具链默认分配相同的路径。为了将它们安装在同一个系统上,我需要将它们放在不同的目录中,并且不能对它们中的任何一个使用符号链接。