boost::system::generic_category 静态链接后未定义



我正在构建一个共享库,该库与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 的文本区域中找到,正如在最后一个命令输出中验证的那样。

例如:

纳米。。/liboms_rocketmq.so |格雷普_ZN5boost6system16generic_categoryEv U _ZN5boost6system16generic_categoryEv

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

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

找出问题所在:我们需要将这些依赖的静态库放在末尾(在我们自己的代码之后(紧邻 -pthreads 之前,这应该是最后一个链接标志。

最新更新