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

Gra*_*eme 10 c++ compiler-construction gcc

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

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

干杯,格雷姆

Max*_*kin 7

最安全的是给它们一个.so及其相应的标头和稳定的二进制API.要二进制稳定,API不应该接受或返回任何std::类型,std::string或者std::vector<>因为类型的二进制布局std::可能会从版本更改为版本.

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

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