如何在Mac OS X上编译通用库?

时间:2010-07-28 05:16:09

标签: macos compilation universal-binary

这可能是一个非常愚蠢的问题,但我不熟悉在Mac上进行开发,并且很难使用通用二进制文件。

我有一个我在QT Creator中编译的应用程序,根据lipo正在生成i386架构输出。据我了解,这意味着它正在生成Mac OS X 32位输出。

应用程序依赖于两个外部库。我正在通过首先调用./config编译这些库中的一个,然后编译。 ./config声明它是“为darwin-i386-cc配置”。但是,在运行make并在结果上调用lipo后,该体系结构将报告为x86_64。

同样,我有另一个外部库。那个没有配置脚本,我只是通过调用make来编译它。这个的输出也是x86_64。

如何编译这两个外部库,以便它们生成与我的应用程序的i386输出兼容的东西?更好的是,我如何编译这两个外部库来生成通用库,这样我就可以从我的应用程序生成一个通用二进制文件,它可以在32位和64位上运行?

另外,基于Mac世界的当前状态,是否还有其他平台可以用来创建适当的,用户友好的Mac OS X通用二进制文件?

3 个答案:

答案 0 :(得分:14)

终于搞定了。

为了控制目标的体系结构,我手动进入并编辑了Makefile。

对于其中一个,我添加到以CFLAGS开头的行的末尾:-arch i386 -arch x86_64 -arch ppc 这产生了一个通用二进制文件。

另一方面,当我做同样的事情时,编译会出错。我不得不循环,一次只放一个拱门,然后在我生成所有三个之后,我用-create标志在它们上面调用lipo来创建一个通用的二进制文件。

答案 1 :(得分:8)

对于./configure,您可以使用:

./ configure CFLAGS =“ - arch i386 -arch x86_64”CXXFLAGS =“ - arch i386 -arch x86_64”LDFLAGS =“ - arch i386 -arch x86_64”--disable-dependency-tracking

- 禁用依赖性跟踪很重要,否则gcc / g ++将拒绝编译代码。

答案 2 :(得分:1)

我无法回答你问题的主要部分,因为我总是使用Xcode而不是make。但至于最后一部分,如果你支持早于10.6的操作系统版本,你可能还需要编译PowerPC(arch。代码“ppc”)。