我得到了一个用 GCC 编译的库,用于编译为静态库的 ARM Cortex-M3 处理器。这个库在它的接口上有一个 jmp_buf。
struct png_struct_def {
#ifdef PNG_SETJMP_SUPPORTED
jmp_buf jmpbuf;
#endif
png_error_ptr error_fn;
// a lot more members ...
};
typedef png_struct_def png_struct;
当我将png_struct
地址传递给库函数时,它不会将值存储error_fn
到jmpbuf
. 显然,它是用另一个大小为 a 的假设编译的jmp_buf
。
两个编译器版本都是 arm-none-eabi-gcc。为什么代码不兼容。什么是“正确的” jmp_buf 大小?我可以在反汇编中看到只使用了 jmp_buf 的前半部分。当 GCC 太大时,为什么不同版本之间的大小会发生变化?
编辑: 该库是用另一个我无法重新编译的库编译的,因为源代码不可用。这个其他库使用这个接口。所以我不能改变界面的结构。