我有麻烦了解海湾合作委员会编译器提供的OS x10.6雪豹,主要是因为我缺乏经验,有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

然而,我的架构被看作是一个英特尔i386类型(I有一个的最新的英特尔酷睿2朵Air)

$ arch
i386

和编译器的目标i686-苹果-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可执行,即使我有拱说我有一个32位的机(为什么?酷睿2 64);即使(我猜)我正在运行的一个32位仁;甚至如果我有一个编译器目标的i686-苹果-达尔文的平台。为什么?他们怎么跑?我应该编64 32?

这个问题是由于我试图编纂海湾合作委员会4.2.3on mac,但我有一堆问题gmp,这三个库和libiberty让(在某些情况下)编制x86_64.我应该编制一切x86_64?如果是这样,什么样的目标(不i686-苹果-darwin10我猜)?

谢谢你的帮助

有帮助吗?

解决方案

默认的编译器上的雪豹是gcc4.2及默认构是x86_64.典型方式建立Mac软件是建立多个结构在独立的推移,然后使用锂聚合物结合的结果。(脂只编译单拱文件合并成一个拱形文件,或者条歙县的多拱文件。它没有工单拱文件,因为你发现.)

中位数的编译器没有做任何事情。你可以建立的32位的二进制文件的有64位编译器,反之亦然。(你认为什么是"目标"编译器实际上是其可执行,这是不同的。)

中位数的核心有没有做任何事情。你可以建立和运行的64位的二进制文件的时候启动的一个32位的内核,反之亦然。

重要的是当你链接,你是否有适当的架构为联系起来。你不能链接32位建立对64位的二进制文件,反之亦然。因此重要的事情就是看看有什么结构的链接库,确保它们连贯一致,然后建立你的二进制的相同的架构,所以你可以链接,对图书馆。

其他提示

i686-苹果-darwin10.0.0包含一个x86_64文件夹,这是不能理解的大多数版本的autotools.换句话说,我想说,海湾合作委员会编译器是不幸的是,没有一个笑话在雪豹。你为什么会绑32位和64位的图书馆成i686-苹果-darwin10.0.0是我之外。

$ ls /usr/lib/gcc
i686-apple-darwin10 powerpc-apple-darwin10

你需要改变所有autotools配置文件处理在寻找*86-达尔文 目录,然后寻找64位的图书馆我想象的。

作为你的系统,mac我的小说其i386尽管其显然使用了64位平台,再另一个错误,因为其分布有64位的硬件。

$arch
i386

苹果的工具链的支持多个架构。如果你想要创建一个胖胖的二进制包含x86和x86_64的代码,然后你必须通过参数 -arch i386 -arch x86_64 以海湾合作委员会.编译器,将编译代码的两倍,为平台。

加入 -arch i386 -arch x86_64 到CFLAGS可以允许你来编译gmp,这三个库,和诸如此类的东西多歙县。建设libusb这种方式为我工作。

这个答案是错误的,但请参见下面的评论

真正的问题是...你怎么得到的一个32位版本的OS x?我不知道雪豹 32位的版本,因为所有的英特尔的芯片是核心或2至强,支持x86_64架构。

哦,雪豹仅适用于英特尔的芯片。

编辑:显然雪豹开始在32位的模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top