【问题标题】:boost::system::generic_category undefined after statically linkedboost::system::generic_category 在静态链接后未定义
【发布时间】:2018-03-14 11:32:51
【问题描述】:

我正在构建一个共享库,它与 boost 静态链接如下:

/usr/bin/c++  -fPIC  -Wall -Wshadow -g -Wl,-Bstatic -lboost_date_time -lboost_thread -lboost_filesystem -lboost_system -Wl,-Bdynamic -ldl -shared -Wl,-soname,liboms_rocketmq.so -o ../lib/liboms_rocketmq.so 

问题是当在 Ubuntu 16.04 上 dlopen 这个库时,应该静态链接的符号未定义(参见以下命令输出:U)而该符号可以在 libboost_system.so 的文本区域中找到,如在最后的命令输出。

例如:

nm ../liboms_rocketmq.so | grep _ZN5boost6system16generic_categoryEv U _ZN5boost6system16generic_categoryEv

nm /usr/local/lib/libboost_system.so| grep _ZN5boost6system16generic_categoryEv 00000000000013e0 T _ZN5boost6system16generic_categoryEv

知道为什么静态链接不能按预期工作吗?也就是将符号插入我们共享库的文本区域。

【问题讨论】:

    标签: c++ generics categories boost-system


    【解决方案1】:

    解决了问题:我们需要将这些依赖的静态库放在最后,(在我们自己的代码之后)就在 -pthreads 之前,它应该是最后一个链接标志。

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2013-08-14
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2013-02-23
      相关资源
      最近更新 更多