15

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

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

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

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

如何编译这两个外部库,以便它们生成与我的应用程序的 i386 输出兼容的内容?更好的是,我如何编译这两个外部库以生成通用库,以便我可以从我的应用程序中生成一个通用二进制文件,该文件适用于 32 位和 64 位?

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

4

3 回答 3

14

终于让它工作了。

为了控制目标的架构,我手动进入并编辑了Makefiles。

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

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

于 2010-07-28T07:08:35.880 回答
8

对于./configure,你可以使用这个:

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

--disable-dependency-tracking 很重要,否则 gcc/g++ 将拒绝编译代码。

于 2013-06-04T08:06:57.613 回答
1

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

于 2010-07-28T05:23:47.217 回答