带 -m32 选项的 32 位 gcc 和 64 位 gcc 有什么区别?
What is difference between 32-bit gcc and 64-bit gcc with -m32 option?
我的团队最近一直在研究 JNI,因此我们面临着有关 32 位和 64 位架构的不同问题。举个例子(temp.c
).
#include <stdio.h>
void main(){
printf("long=%d\n",sizeof(long));
}
gcc_32_bit temp.c
和gcc_64_bit -m32 temp.c
有区别吗?
测试案例:
案例 1: 使用 gcc temp.c
在 64 位 ubuntu 上编译的代码。 输出: long=8
64 位 ubuntu。
案例 2: 使用 gcc -m32 temp.c
在 64 位 ubuntu 上编译的代码。 输出: long=4
64 位 ubuntu。
案例 3: 使用 /usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc temp.c
在 64 位 MAC (64-bit cross compiler used) 上编译的代码。 输出: long=8
64 位 ubuntu。
案例 4: 使用 /usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-gcc temp.c
在 64 位 MAC (32-bit cross compiler used) 上编译的代码。 输出: Error: cannot run
64 位 ubuntu。
我们正在使用 MAC 交叉编译器,因为我们没有 32 位 linux 机器。
它可能看起来有点奇怪,但它已经开始无处不在了。
正如 amdn 在上面的评论中发布的那样,这可能是由于缺少某些 32 位库。由于它之前没有工作,我安装了 gcc-multilib 和 Ubuntu 的一些自动更新,它已经开始工作了。
感谢大家的大力帮助。
我的团队最近一直在研究 JNI,因此我们面临着有关 32 位和 64 位架构的不同问题。举个例子(temp.c
).
#include <stdio.h>
void main(){
printf("long=%d\n",sizeof(long));
}
gcc_32_bit temp.c
和gcc_64_bit -m32 temp.c
有区别吗?
测试案例:
案例 1: 使用 gcc temp.c
在 64 位 ubuntu 上编译的代码。 输出: long=8
64 位 ubuntu。
案例 2: 使用 gcc -m32 temp.c
在 64 位 ubuntu 上编译的代码。 输出: long=4
64 位 ubuntu。
案例 3: 使用 /usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc temp.c
在 64 位 MAC (64-bit cross compiler used) 上编译的代码。 输出: long=8
64 位 ubuntu。
案例 4: 使用 /usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-gcc temp.c
在 64 位 MAC (32-bit cross compiler used) 上编译的代码。 输出: Error: cannot run
64 位 ubuntu。
我们正在使用 MAC 交叉编译器,因为我们没有 32 位 linux 机器。
它可能看起来有点奇怪,但它已经开始无处不在了。
正如 amdn 在上面的评论中发布的那样,这可能是由于缺少某些 32 位库。由于它之前没有工作,我安装了 gcc-multilib 和 Ubuntu 的一些自动更新,它已经开始工作了。
感谢大家的大力帮助。