2

我有使用 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 中重命名的共享对象链接 - 应该没有任何问题。

4

0 回答 0