32位gcc和64位gcc与-m32选项有什么区别?

Amb*_*wal 5 c macos ubuntu cpu-architecture cross-compiling

我的团队最近一直在研究JNI,因此我们遇到了有关32位和64位架构的不同问题.我们来举个例子(temp.c).

#include <stdio.h>
void main(){
  printf("long=%d\n",sizeof(long));
}
Run Code Online (Sandbox Code Playgroud)

有什么区别gcc_32_bit temp.cgcc_64_bit -m32 temp.c

案例测试:

案例1:使用64位ubuntu编译的代码gcc temp.c.输出: long=8在64位ubuntu上.

案例2:使用64位ubuntu编译的代码gcc -m32 temp.c.输出: long=4在64位ubuntu上.

案例3:使用64位MAC(使用64位交叉编译器)编译的代码/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc temp.c.输出: long=8在64位ubuntu上.

案例4:使用64位MAC(使用32位交叉编译器)编译的代码/usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-gcc temp.c.输出: Error: cannot run在64位ubuntu上.

我们使用MAC交叉编译器,因为我们没有32位linux机器.

Amb*_*wal 0

这可能看起来有点奇怪,但它已经开始发挥作用了。

正如amdn在上面的评论中发布的那样,这可能是由于缺少一些 32 位库。由于它之前不起作用,我安装了 gcc-multilib 和 Ubuntu 的一些自动更新,它已经开始工作了。

感谢大家的大力帮助。