我想了解G ++选择其中的libstdc ++版本它链接反对,这是什么意思时,图书馆的“系统”的版本是不同的。
我用gcc /克++ 4.1.2,其中根据ABI准则文档,包括的libstdc ++ so.6.0.8,果然:
-rwxr-xr-x 1 root root 4397810 May 18 2007 /opt/gcc4.1.2/lib/libstdc++.so.6.0.8
根据我的ABI向前兼容的了解,我可以用G ++ 4.1.2建立并期望代码与的libstdc更高版本的系统上运行比++ 6.0.8,但不能在一个与以前的版本,因为这将有ABI的旧版本。
在同一台机器上存在的的libstdc ++在/ usr / lib中的旧版本:
-rwxr-xr-x 1 root root 804288 Jul 22 2005 /usr/lib/libstdc++.so.6.0.3
如果我在此机器上使用克++ 4.1.2编译代码,那么它ldd的,我看到引用的的libstdc ++在/ usr / lib中的版本,这是6.0.3:
# ldd test
.
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x005b6000)
.
这是意料之中的,因为在/ usr / lib中首先检查。 和应用程序运行正常。
我的问题是:什么是怎么回事?
先后G ++ 4.1.2联对的libstdc ++版本。所以这是该版本(6.0.8)的一部分? 如果是这样,怎么来的可执行文件可以使用在运行时/ usr / lib目录的旧版本,当有一个较旧ABI? 运气?
或有G ++ 4.1.2回升的libstdc的/ usr / lib目录++版本(6.0.3)链接时和使用的,因为它解决了同样的方式库路径,可执行文件在运行时怎么办? 能否G ++做到这一点,即使++的libstdc不是“自己”的版本? 什么是在G ++ 4.1.2(6.0.8)中的libstdc ++版本的目的是什么? 它已被用于在所有在这个过程?
任何见解表示赞赏。