使用不同版本的GCC编译的目标文件如何链接

10

我对使用最新版本的GCC 4.4.x/4.5.x编译C++库时与老版本(如3.4.x/4.1.x)客户端兼容性存在一些担忧。有人建议的解决方案是编译目标文件并进行分发。这样,客户端可以使用任何版本的GCC和相关ABI进行链接。以下是一些问题:

  1. 这个做法正确吗?
  2. 是否应该静态链接以避免libstdc++兼容性问题?
  3. 这是不必要的吗(我听说gcc 3.4之后是向前兼容的)?

谢谢, Graeme

2个回答

7
最安全的方法是提供一个稳定的二进制API,其中包括.so文件和相应的头文件。为了保持二进制稳定,该API不应接受或返回任何std::类型,如std::stringstd::vector<>,因为std::类型的二进制布局可能会随版本而改变。
此外,它应该与libstdc++和libgcc_s静态链接,以便您的客户端不必链接到特定版本的libstdc++。
您还可以将所有.o文件打包成一个.a文件,以方便客户端使用。这样,当您添加新的.o文件时,客户端无需更新其makefile以链接到新的.o文件。

你知道 Solaris 上的 gcc 是否也是如此吗? - Graeme
是的。以上内容不特定于操作系统。 - Maxim Egorushkin

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接