我有使用 boost_system 共享对象的示例应用程序。现在,由于某些情况,我必须支持 2 个不同的 boost_system 共享对象 - 一个使用 gcc 构建,另一个使用 sun 的 cc 在单个目录 - /home/mydir. 对应的文件是:-
libboost_system_v1.so --dependency for--- applicationv1.so
libboost_system_v2.so --dependency for--- applicationv2.so
它在生成文件中链接为。
... $(BOOST_LIB_V1) -lboost_system_v1
因此,我将 libboost_system_1_41_0.so 重命名为 libboost_system_v1.so,并从 $BOOST_HOME_V1/stage/lib 中删除了软链接。现在,当我尝试构建应用程序时 - 我没有收到任何错误。但是 ldd 失败:-
ldd /home/mydir/applicationv1.so
libboost_system.so.1.41.0 => not found
.....................................
.....................................
.....................................
BOOST_HOME_v1/stage/lib(=BOOST_LIB_v1) 看起来像:-
libboost_system_v1.so
libboost_system_v1.a
我无法理解 - 为什么 ldD 仍将 libboost_system.so.1.41.0 显示为依赖项而不是 libboost_system_v1.so。
我期待看到下面的 o/p不是得到的:-
ldd /home/mydir/applicationv1.so
libboost_system_v1.so -> /home/mydir/libboost_system_v1.so
有人可以解释一下是否有解决方案来实际重命名共享对象而不处理 boost 的默认符号链接?我检查了 src/build.jam - 看起来链接在这里完成了 - 但我认为只要我删除软链接,重命名共享对象并与 makefile 中重命名的共享对象链接 - 应该没有任何问题。