什么使g ++包括GLIBCXX_3.4.9?

ace*_*mtp 4 c++ linux compiler-construction gnu g++

我使用g ++版本4.2.3在同一个GNU/Linux服务器上编译了2个不同的二进制文件.

第一个使用:

GLIBC_2.0
GLIBC_2.2
GLIBC_2.1
GLIBCXX_3.4
GLIBC_2.1.3
Run Code Online (Sandbox Code Playgroud)

第二个使用:

GLIBC_2.0
GLIBC_2.2
GLIBC_2.1
GLIBCXX_3.4.9
GLIBCXX_3.4
GLIBC_2.1.3
Run Code Online (Sandbox Code Playgroud)

为什么第二个二进制文件使用的GLIBCXX_3.4.9只能在libstdc ++.so.6.0.9上使用,而不能在libstdc ++中使用.so.6.0.8

g ++生成的新功能是什么,需要ABI中断并强制系统拥有GLIBCXX_3.4.9?

有没有办法禁用这个新功能,不需要GLIBCXX_3.4.9?

Emp*_*ian 8

要找出二进制实际依赖的列出的GLIBCXX_3.4.9符号中的哪一个,请执行以下操作:

readelf -s ./a.out | grep 'GLIBCXX_3\.4\.9' | c++filt
Run Code Online (Sandbox Code Playgroud)

一旦知道要查找的符号,就可以追溯到需要它们的对象:

nm -A *.o | grep _ZN<whatever>
Run Code Online (Sandbox Code Playgroud)

最后,要将其与源代码联系起来,您可以执行以下操作:

objdump -dS foo.o
Run Code Online (Sandbox Code Playgroud)

并查看哪些代码引用了3.4.9符号.