与静态libstd链接时的唯一全局符号

时间:2018-07-04 15:17:29

标签: c++ gcc ldd nm

我正在为另一个系统构建共享库。我想将其链接为静态链接,包括所有libstdc和libstdc ++,因此我可以在另一个较旧的linux上按原样使用它。但是,当我将其与以下选项链接时:

/app/localstorage/dev/gcc/4.8.5/bin/g++ -fPIC -static-libgcc -static-libstdc++ -fno-gnu-unique -shared -Wl,-soname,libsgxstconnector.so -o libsgxstconnector.so one.o two.o -ldl -lrt

在较旧的linux上,我无法加载该库。错误消息状态

libsgxstconnector.so: undefined symbol: _ZNSt8messagesIcE2idE
较旧服务器上的

nm -a显示:

0000000000411c20 ? _ZNSt8messagesIcE2idE

这吗?标志表示ld不知道,这可能是无法加载的原因。在我的构建Linux上,它表明它是一个唯一的全局符号(标志u)

0000000000411c20 u _ZNSt8messagesIcE2idE

因此出现一个问题:是否有可能从我的链接库中删除此功能?有没有建立与Linux无关的二进制文件的良好实践?也许-fno-gnu-unique应该在不同的地方?

ldd在所有系统上的输出都相同:

linux-vdso.so.1 =>  (0x00007ffd23dac000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fed7ce12000)
librt.so.1 => /lib64/librt.so.1 (0x00007fed7cc09000)
libm.so.6 => /lib64/libm.so.6 (0x00007fed7c985000)
libc.so.6 => /lib64/libc.so.6 (0x00007fed7c5f1000)
/lib64/ld-linux-x86-64.so.2 (0x00000030c4800000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fed7c3d3000)

0 个答案:

没有答案