如果我在我的机器上编译一个 C++ 程序,然后在另一个(使用旧软件)上运行它,我会得到:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
.
事实上,在我的系统上 glibc 是更新的(我得到了 gcc-libs 4.5.1: libstdc++.so.6.0.14)并且strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
从GLIBCXX_3.4
to打印GLIBCXX_3.4.14
。相反,在另一个系统上,它只打印到GLIBCXX_3.4.8
(我得到了 libstdc++.so.6.0.8)。
所以我有几个问题:
为什么我的链接器将 C++ 二进制文件链接到 libstdc++ 版本
GLIBCXX_3.4.9
而不是GLIBCXX_3.4.14
?如果我根据 libstdc++ 版本编译我的二进制文件,
GLIBCXX_3.4
我猜它几乎可以在任何地方运行。这是否意味着任何类型的问题?(例如:它会使用旧的——因此更糟糕的——算法实现吗?)相反,如果我将我的程序与我的 libstdc++静态链接,我猜它会在任何地方运行;当然,二进制文件会更大(~1MB),还有其他优点/缺点吗?
我可以强制链接器将我的二进制文件链接到给定版本的 libstdc++ 吗?