我团队最近一直在研究JNI,因此我们遇到了关于32位和64位架构的不同问题。让我们举个例子(temp.c
)。
#include <stdio.h>
void main(){
printf("long=%d\n",sizeof(long));
}
在编译C语言代码时,使用gcc_32_bit temp.c
和gcc_64_bit -m32 temp.c
有什么区别吗?
测试情况:
情况1:在64位ubuntu上使用gcc temp.c
编译代码。输出结果:在64位ubuntu上long=8
。
情况2:在64位ubuntu上使用gcc -m32 temp.c
编译代码。输出结果:在64位ubuntu上long=4
。
情况3:在64位MAC上(使用64位交叉编译器)使用/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc temp.c
编译代码。输出结果:在64位ubuntu上long=8
。
/usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-gcc temp.c
。输出:无法在64位ubuntu上运行
。
我们使用MAC交叉编译器是因为我们没有32位linux机器。
-arch i386 -arch x86_64
)。此外,选择-m32
并不一定限制编译器仅使用i386
上可用的指令。选择-march=i386
才会限制编译器,而默认的-march
选项取决于编译器构建时的配置。 - l'L'l