如何使用Xcode 3.2.2为OSX构建通用二进制文件(ppc / i386)?

时间:2010-06-23 22:06:32

标签: xcode macos build universal-binary

我正在尝试为工作中的项目构建通用二进制文件,但我似乎无法正确设置Xcode。

我熟悉Apple文档,但显然我没有正确阅读。

有问题的Xcode构建选项似乎是:

  • 架构
  • 基础SDK
  • C / C ++编译器版本
  • Mac OS X部署目标

在我的设置中,我有以下有效架构:i386 ppc ppc64 ppc7400 ppc970 x86_64。

如果我使用以下选项,我会得到 i386 ppc970 的二进制文件:

  • 架构: i386 ppc
  • 基础SDK: Mac OS X 10.5
  • C / C ++编译器版本: GCC 4.0
  • Mac OS X部署目标: Mac OS X 10.5

我有几个问题:

  1. 为什么选择ppc970而不是ppc7400(或简称ppc)?
  2. ppcs(ppc,ppc64,ppc7400,ppc970)有什么区别?
  3. 如何为任何ppc获取二进制文件?
  4. 显然,我需要一个带有ppc7400的二进制文件来处理我们测试的Mac Mini。 Mini有一个G4,运行OSX 10.5.8。据我所知,带有ppc7400的二进制文件可以工作,但不能仅使用ppc970。

    我已经尝试了上述构建选项的几种组合,包括将我的Base SDK更改为10.4u。上面的配置是唯一一个甚至构建的配置。其他构建失败,通常是因为无法识别头文件或明显可用的#defines。例如,如果我将编译器更改为gcc 4.2,由于#include_next指令而没有明确的路径来纠正标头,因此我在搜索stdarg.h时遇到错误。如果我将我的Base SDK删除到4.0,尽管没有更改任何包含,仍然不会识别#define FSIZE long long。

    我真的很感激你能给我的任何见解。


    编辑更新

    感谢您的信息。我现在明白了旗帜。但是我得到了一个奇怪的结果。

    这些是我的构建标志:

    GCC_VERSION = 4.0 MACOSX_DEPLOYMENT_TARGET = 10.4 SDKROOT = macosx10.5 GCC_MODEL_TUNING = G3

    这会生成具有arch'ppc'的目标文件(.o),如lipo所示。所有包含的库和框架都是'ppc'或'ppc7400'(再次由lipo显示)。但是,最终版本是'ppc970'。

    我仔细检查了这一点,以确保我得到了一切。任何人都可以想到ppc架构差异的原因吗?

    我甚至创建了一个新项目(Hello World)并将其链接到第一个项目的所有库和框架。 Hello构建为'ppc'而非'ppc970'。

    这对我来说毫无意义。

2 个答案:

答案 0 :(得分:4)

ppc970 == G5。如果您需要支持G4,那么只需为ppc7400构建。

但是,您可以从弹出菜单中选择32-bit Universal(或Standard (32/64-bit Universal),如果适用),而不是弄乱单个体系结构设置,这应该可以为您提供所需的内容。

答案 1 :(得分:1)

在目标设置中进行以下更改..

GCC_MODEL_PPC64 = NO

即,取消选中“使用64位整数数学”。

启用将打开64位。所以它将是G5开始......