我正在构建一个共享库,它与 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 | grep _ZN5boost6system16generic_categoryEv U _ZN5boost6system16generic_categoryEv
nm /usr/local/lib/libboost_system.so| grep _ZN5boost6system16generic_categoryEv 00000000000013e0 T _ZN5boost6system16generic_categoryEv
知道为什么静态链接不能按预期工作吗?又名,将符号插入我们共享库的文本区域。