据我所知,使用不同版本的GCC应用二进制接口(ABI)的库是无法链接的。每个GCC版本都有ABI更改吗?如果我使用GCC 4.3.2,是否可以链接使用4.3.1构建的库?是否有一种矩阵列出了所有组合GCC版本的方式?
据我所知,使用不同版本的GCC应用二进制接口(ABI)的库是无法链接的。每个GCC版本都有ABI更改吗?如果我使用GCC 4.3.2,是否可以链接使用4.3.1构建的库?是否有一种矩阵列出了所有组合GCC版本的方式?
啊,呀。
如何确定哪个gcc编译器编译了给定的二进制文件?以下是来自gcc-4.7.2-1-mingw32.README.txt 的警告:
GCC 4.7.0 中 C 和 C++ ABI 已更改,这意味着通常情况下您不能链接使用此版本编译器和 GCC 4.7.0 之前的版本编译的二进制文件。具体而言:
默认情况下启用选项 -mms-bitfields,这意味着位域布局遵循 Microsoft 编译器的约定。
C++ 类成员函数现在遵循 __thiscall 调用约定。
编译器现在假定调用方弹出堆栈以获取指向聚合返回值的隐式参数。这会影响按值返回结构体(例如复杂数学类型)的函数。