运行时链接程序问题:“加载共享库时出错”

问题描述

我正在一个由多个相似程序组成的C ++项目。每个程序都使用各种头文件和二进制文件(大约80个)。我设法编译了每个程序,并成功地运行了其中的每个程序,但其中一个程序名为VerifyServer。当我尝试运行此命令时,出现以下错误:

./ VerifyServer:加载共享库时出错:libboost_system.so.1.57.0:无法打开共享对象文件:没有此类文件或目录

但是,这是很奇怪的事情:

我也尝试运行其他程序时遇到了非常类似的错误,但是后来我添加了

-Wl,-rpath=$(BOOST_LIB_HEADER_PATH)/stage/lib

到我的每个编译器参数,它奏效了。我设法运行了每个程序,甚至VerifyServer错误消息中指示的文件也更改了。请注意,变量BOOST_LIB_HEADER_PATH已正确分配给我的Boost库的路径。

由于我的运行时链接程序未能找到此二进制文件以将其正确链接到我的程序,因此我尝试检查其找不到哪些依赖项,因此在运行时

ldd VerifyServer | grep boost(为简单起见,我使用grep)

我收到此消息:

libboost_thread.so.1.57.0 => / path / to /boost_1_57_0/stage/lib/libboost_thread.so.1.57.0(0x00007f34c9b36000)
libboost_serialization.so.1.57.0 => / path / to /boost_1_57_0/stage/lib/libboost_serialization.so.1.57.0(0x00007f34c9ad1000)

libboost_system.so.1.57.0 =>找不到

因此,到目前为止,我假设系统二进制文件与其他目录不在同一目录中。当我手动检查时,我觉得很奇怪,它就在那里!因此,我决定对其中一个没有任何问题的程序执行相同的操作,并且我使用

ldd IdentityProviderServer | grep boost

,我收到以下消息:

libboost_thread.so.1.57.0 => / path / to /boost_1_57_0/stage/lib/libboost_thread.so.1.57.0(0x00007f97b6094000)

libboost_serialization.so.1.57.0 => / path / to /boost_1_57_0/stage/lib/libboost_serialization.so.1.57.0(0x00007f97b602f000)

libboost_system.so.1.57.0 => / path / to /boost_1_57_0/stage/lib/libboost_system.so.1.57.0(0x00007f97b602a000)

libboost_filesystem.so.1.57.0 => / path / to /boost_1_57_0/stage/lib/libboost_filesystem.so.1.57.0(0x00007f97b600d000)

当我看到可以在其他位置的位置找到系统二进制文件时,我感到很困惑。我不知道这是什么问题。链接器的工作方式我缺少什么?

请注意,我必须在此处使用boost的1.57.0版本。我无法将其更新到当前版本,并且我怀疑我的问题与boost版本有关。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)