У меня проблемы с пониманием компилятора gcc, предоставляемого OSX 10.6 Snow Leopard, в основном из-за отсутствия у меня опыта работы с 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?
Этот вопрос связан с моей попыткой скомпилировать gcc 4.2.3 на Mac, но у меня возникли проблемы с компиляцией gmp, mpfr и libiberty (в некоторых случаях) для x86_64. Должен ли я скомпилировать все x86_64? Если да, то какова цель (не i686-apple-darwin10, я думаю)?
Спасибо за помощь