Gra*_*eme 8 c++ compiler-construction gcc binary-compatibility
我目前正在编写一个库,正在考虑从GCC 4.1.2升级到GCC的4.5.2(最新版本).如果我将我的代码编译成静态库,我可以假设编译器兼容性(显然在相同的操作系统上)对于客户端应该是非问题吗?
编辑 为了进一步澄清:如果我向客户端提供一个使用gcc 4.5.2编译的静态链接库,那么这个库的用户在编译器和必须使用的版本方面有什么限制?
刚刚遇到过这个问题,我相信我会从http://gcc.gnu.org/bugs/#nonbugs回答我的问题:
ABI更改C++应用程序二进制接口(ABI)由两部分组成:第一部分定义了如何布置类的元素,如何调用函数,如何修改函数名称等等; 第二部分讨论libstdc ++中对象的内部.虽然我们努力实现不变的ABI,但到目前为止,我们不得不对每个主要版本进行修改.如果将编译器更改为其他主要版本,则必须重新编译包含C++代码的所有库.如果您没有这样做,您可能会遇到链接器错误或程序故障.我们的一些Java支持库也包含C++代码,因此您可能希望重新编译所有库以确保安全.如果您已更改为相同版本编译器的错误修复版本,则无需重新编译; 错误修复版本小心避免ABI更改.另请参阅GCC手册的兼容性部分.
备注:主要版本通过更改两部分或三部分版本号的第一个或第二个组件来指定.次要(错误修复)版本仅由对第三个组件的更改指定.因此,GCC 3.2和3.3是主要版本,而3.3.1和3.3.2是GCC 3.3的错误修复版本.随着3.4系列,我们正在引入一个新的命名方案; 本系列的第一个版本是3.4.0而不是3.4.
据我了解,我需要确保客户端将我的库与主要版本兼容的gcc版本链接起来.
| 归档时间: |
|
| 查看次数: |
2620 次 |
| 最近记录: |