我使用g ++版本4.2.3在同一个GNU/Linux服务器上编译了2个不同的二进制文件.
第一个使用:
GLIBC_2.0 GLIBC_2.2 GLIBC_2.1 GLIBCXX_3.4 GLIBC_2.1.3
第二个使用:
GLIBC_2.0 GLIBC_2.2 GLIBC_2.1 GLIBCXX_3.4.9 GLIBCXX_3.4 GLIBC_2.1.3
为什么第二个二进制文件使用的GLIBCXX_3.4.9只能在libstdc ++.so.6.0.9上使用,而不能在libstdc ++中使用.so.6.0.8
g ++生成的新功能是什么,需要ABI中断并强制系统拥有GLIBCXX_3.4.9?
有没有办法禁用这个新功能,不需要GLIBCXX_3.4.9?
要找出二进制实际依赖的列出的GLIBCXX_3.4.9符号中的哪一个,请执行以下操作:
readelf -s ./a.out | grep 'GLIBCXX_3\.4\.9' | c++filt
一旦知道要查找的符号,就可以追溯到需要它们的对象:
nm -A *.o | grep _ZN
最后,要将其与源代码联系起来,您可以执行以下操作:
objdump -dS foo.o
并查看哪些代码引用了3.4.9符号.