链接使用不同版本的GCC构建的目标文件

时间:2011-01-17 10:26:27

标签: c++ gcc compiler-construction

我对使用现代版本的GCC 4.4.x / 4.5.x构建C ++库有一些兼容性问题,其中旧版本的客户端,例如3.4.x / 4.1.x。已经提出的一个解决方案是编译目标文件并分发它们。然后,客户可以使用任何版本的GCC和相关的ABI进行链接。一些问题:

  1. 这是对的吗?
  2. 我应该静态链接以避免libstdc ++兼容性问题吗?
  3. 这是不必要的(我听说gcc 3.4以后是向前兼容的)?
  4. 干杯, 格雷姆

2 个答案:

答案 0 :(得分:7)

最安全的方法是使用稳定的二进制API为它们提供.so及其相应的标头。为了二进制稳定,API不应接受或返回任何std::类型,如std::stringstd::vector<>,因为std::类型的二进制布局可能会因版本而异。

它应该与libstdc ++和libgcc_s静态链接,这样您的客户端就不必链接到特定版本的libstdc ++。

为方便起见,您还可以将所有.o文件打包到一个.a文件中,这样当您添加新的.o文件时,您的客户端不必更新其makefile以链接新的.o。

答案 1 :(得分:1)

AFAIK,链接应该使用最新版本。

请参阅http://gcc.gnu.org/onlinedocs/gcc/Compatibility.html

http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

获取相关的gcc文档。