Ste*_*ini 9 macos gcc osx-snow-leopard 32bit-64bit
我无法理解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
Run Code Online (Sandbox Code Playgroud)
但是,我的架构被视为intel i386类型(我有一台最新的Intel Core2 duo MacBook)
$ arch
i386
Run Code Online (Sandbox Code Playgroud)
编译器的目标是i686-apple-darwin10
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)
Run Code Online (Sandbox Code Playgroud)
当然,如果我编译32位,我得到一个32位可执行文件.
$ gcc -m32 foo.c -o foo
$ file foo
foo: Mach-O executable i386
Run Code Online (Sandbox Code Playgroud)
但我没有全面了解.编译器的默认设置是生成x86_64可执行文件,即使我有拱形说我有32位机器(为什么?Core2是64); 即使(我猜)我正在运行32位内核; 即使我有一个针对i686-apple-darwin平台的编译器.为什么?他们怎么跑?我应该编译64或32吗?
这个问题是由于我尝试在mac上编译gcc 4.2.3,但我遇到了一堆gmp,mpfr和libiberty的问题(在某些情况下)为x86_64编译.我应该编译所有x86_64吗?如果是这样,目标是什么(我猜不是i686-apple-darwin10)?
谢谢您的帮助
cde*_*osa 15
Snow Leopard上的默认编译器是gcc4.2,其默认架构是x86_64.构建Mac软件的典型方法是在单独的传递中构建多个体系结构,然后使用lipo来组合结果.(lipo只将单个arch文件编译成多个arch文件,或者从多个arch文件中删除arch.如你所发现的那样,它对单个arch文件没有任何实用性.)
编译器的位数与任何事情无关.您可以使用64位编译器构建32位二进制文件,反之亦然.(您认为编译器的"目标"实际上是它的可执行文件,这是不同的.)
内核的位数与任何事情无关.您可以在32位内核上启动时构建和运行64位二进制文件,反之亦然.
重要的是当你链接时,你是否有适当的链接架构.您不能将32位构建与64位二进制文件链接,反之亦然.因此,重要的是要了解链接库的体系结构,确保它们是一致的,然后构建相同体系结构的二进制文件,以便链接到您拥有的库.
| 归档时间: |
|
| 查看次数: |
22230 次 |
| 最近记录: |