我对 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 duo 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,但我在为 x86_64 编译(在某些情况下)gmp、mpfr 和 libiberty 方面遇到了一堆问题。我应该编译一切 x86_64 吗?如果是这样,目标是什么(我猜不是 i686-apple-darwin10)?
谢谢您的帮助