2009-09-07 56 views
3

我指的是以下来源:http://clpbar.sourceforge.net大厦以产生二进制的Mac OS 10.5(10.6)

生成过程是标准:./configure随后make

如果我建立10.5我得到一个二进制其file包含:Mach-O executable i386
如果我建立在10.6,我得到一个二进制其file包含:Mach-O 64-bit executable x86_64

如何从命令建立并且生成Mach-O executable i386类型的可执行文件,或者更好的是包含两种类型可执行文件的通用二进制文件。

请测试任何建议的解决方案。

感谢,
亚光

回答

3

从苹果开发论坛:

./configure CC="gcc -arch i386" CXX="g++ -arch i386" 

这完美的作品。

+0

我认为这不会构建“两种”类型的通用二进制文件? – rogerdpack 2013-04-11 14:22:15

+0

@rogerdpack试试看看。用'file'命令检查二进制文件,看看它包含哪些体系结构。另请参阅其他答案。 – 2013-04-18 11:32:20

1

使用-arch标志为每个目标。所以,例如

gcc -arch i386 -arch x86_64 ... 

将与这两者构建一个胖二进制文件。我相信,默认情况下,gcc将构建到目标架构,即x86_64和OSX 10.6。

3

默认情况下,随OS X 10.6发行的GCC版本将生成64位二进制文​​件。与10.5分发的GCC版本默认构建32位二进制文​​件。

在运行./configure之前,设置一些环境变量。如果你希望它是英特尔通用二进制与i386和x86_64的代码,设置下列变量(假设你使用bash):

export CFLAGS="-arch i386 -arch x86_64" 
export CXXFLAGS=$CFLAGS 
export LDFLAGS=$CFLAGS 

这将告诉配置脚本通过这些编译器和连接选项,从而构建一个包含i386和x86_64体系结构的二进制文件。

或者,如果你想让它只能建作为i386的二进制:

export CFLAGS="-arch i386" 
export CXXFLAGS=$CFLAGS 
export LDFLAGS=$CFLAGS 
+0

我刚试过这个,它没有工作。难道环境变量会被./configure覆盖吗? – 2009-09-08 11:12:51