如果我在我的机器上编译一个C++程序,并在另一个机器上运行它(用较旧的软件),我得到:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
.
事实上,在我的系统上,glibc是更新的(我得到了gcc libs 4.5.1:libstdc++.so.6.0.14),从GLIBCXX_3.4
到GLIBCXX_3.4.14
打印了strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
次.而在另一个系统上,它最多只能打印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++链接我的二进制文件吗?