我对使用现代版本的GCC 4.4.x / 4.5.x构建C ++库有一些兼容性问题,其中旧版本的客户端,例如3.4.x / 4.1.x。已经提出的一个解决方案是编译目标文件并分发它们。然后,客户可以使用任何版本的GCC和相关的ABI进行链接。一些问题:
干杯, 格雷姆
答案 0 :(得分:7)
最安全的方法是使用稳定的二进制API为它们提供.so及其相应的标头。为了二进制稳定,API不应接受或返回任何std::
类型,如std::string
或std::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文档。