我对OSX 10.6雪豹自带的gcc编译器感到困惑,主要是因为我缺乏64位环境方面的经验。
$ cat >foo.c
main() {}
$ gcc foo.c -o foo
$ file foo
foo: Mach-O 64-bit executable x86_64
$ lipo -detailed_info foo
input file foo is not a fat file
Non-fat file: foo is architecture: x86_64
然而,我的架构被视为Intel i386类型(我拥有最新的Intel Core2双核MacBook之一)。
$ arch
i386
编译器的目标是i686-apple-darwin10。
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)
当然,如果我编译32位,就会得到一个32位的可执行文件。
$ gcc -m32 foo.c -o foo
$ file foo
foo: Mach-O executable i386
但是我不明白大局。编译器的默认设置是生成x86_64可执行文件,即使我的arch说我有一个32位机器(为什么?Core2是64位);即使(我猜)我正在运行32位内核;即使我有一个针对i686-apple-darwin平台的编译器。为什么?它们如何运行?我应该编译64位还是32位?
这个问题是由于我尝试在Mac上编译gcc 4.2.3引起的,但我遇到了一堆问题,其中gmp、mpfr和libiberty在某些情况下被编译为x86_64。我应该编译所有的x86_64吗?如果是这样,目标是什么(我猜不是i686-apple-darwin10)?
感谢您的帮助。