【发布时间】:2011-11-10 06:49:32
【问题描述】:
我的应用程序在主机 A(操作系统:Ubuntu 11.04)中链接 libboost_python(版本:1.46.1)。该库是从源代码构建的,其信息如下:
lrwxrwxrwx 1 henry henry 25 2011-11-10 14:33 libboost_python.so -> libboost_python.so.1.46.1
-rwxr-xr-x 1 henry henry 379867 2011-11-10 14:33 libboost_python.so.1.46.1
当我在主机 B(操作系统:Ubuntu 11.10)上运行我的应用程序时,我安装了与 apt 相同版本的 libboost_python。它的信息有点不同:
lrwxrwxrwx 1 root root 30 2011-06-03 14:54 /usr/lib/libboost_python-py27.so -> libboost_python-py27.so.1.46.1
-rw-r--r-- 1 root root 291224 2011-06-03 14:54 /usr/lib/libboost_python-py27.so.1.46.1
lrwxrwxrwx 1 root root 23 2011-11-09 04:34 /usr/lib/libboost_python.so -> libboost_python-py27.so
libboost_python.so 链接的最终目标是不同的(主机 B 有一个“py27”)。所以当我运行我的应用程序时,会发生错误:
error while loading shared libraries: libboost_python.so.1.46.1: cannot open shared object file: No such file or directory
如何解决这个冲突的名称? 我运行 cmd 'readelf -d myapp' 时的输出:
0x00000001 (NEEDED) Shared library: [libboost_python.so.1.46.1]
0x00000001 (NEEDED) Shared library: [libboost_system.so.1.46.1]
0x00000001 (NEEDED) Shared library: [libpython2.7.so.1.0]
0x00000001 (NEEDED) Shared library: [libjuserclass.so.0]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
奇怪的是 boost 的入口并没有保存 so-name 而是 lib 的全名。
【问题讨论】:
-
顺便说一句,您应该接受一些问题的答案。阻止它们显示为未回答的问题,并对愿意回答的人表现出一些礼貌。
标签: linux boost shared-libraries