从 `-arch ppc` 更改为 `-arch ppc7400` 的原因?

Cause of change from `-arch ppc` to `-arch ppc7400`?

这与 有关。

我发现 cURL 库的有效配置为 -arch ppc -arch ppc64,但构建的 fat 库具有架构 -arch ppc7400 -arch ppc64。这会导致 Git configure/link 失败,因此 Git 的配置 [静默] 删除 cURL,即 [静默] 删除 HTTP/HTTPS 助手。

真正奇怪的是其他八个左右的依赖库在使用相同步骤构建时都很好。依赖库按照说明都有 -arch ppc -arch ppc64。其他库包括 Zlib、Bzip、iConv、PCRE 和 OpenSSL。

我用 $ grep -IR -i "\-arch ppc7400" *$ grep -IR -i "ppc7400" *$ grep -IR -i "\-arch" * grep 了 cURL 源,但我找不到更改的源。

-arch ppc 变为 -arch ppc7400 的原因是什么?

这不是 git- 或 curl 特定的,实际上是编译器的一个有意特性。编译器注意到您 运行ning 在 OS X 10.5 Leopard 上。 ppc7400 是 PowerPC G4 处理器的架构,这是 运行 Leopard 所需的最低处理器,因此编译器已将您对 -arch ppc 的要求更改为 -arch ppc7400 以生成最佳代码这将 运行 在支持的最低计算机上。如果您想支持 Mac 运行ning 早期的 G3 处理器,那么这也意味着您需要在 OS X 10.4 上支持 运行ning,这是最后一个 OS X版本支持G3。为此,将 -mmacosx-version-min=10.4 标志传递给编译器,或将 MACOSX_DEPLOYMENT_TARGET 环境变量设置为 10.4.

我注意到从 ppc 到 ppc7400 的转换只有在您构建通用架构时才会发生(即,如果您同时也在构建另一个架构)。我不确定为什么只为单个拱门构建时它不这样做。

What can be the cause of the change from -arch ppc to -arch ppc7400?

Ryan 在 方面是正确的“...编译器已将您对 -arch ppc 的请求更改为 -arch ppc7400 以生成最佳代码”。它记录在 GCC 手册 3.17.10 Darwin Options.

然而,答案中的其他一些陈述并不十分准确,所以我需要提供一个答案来澄清它们,以防其他人觉得问题和答案有用。首先,硬件是 Mac G5,而不是 G4。

其次,尚不清楚该行为是硬编码到编译器中还是来自 specs 文件。

第三,我遇到了一个标准的问题./configure && make;并且 not 通过调用通用或胖二进制文件。如果所有库和程序中的 ./configure && make 始终如一地为 PPCPPC970PPC7400 生成代码,我会很高兴。我切换到通用或胖二进制文件以试图完全控制情况。

四、MacG4和OSX 10.4与问题无关

最后,无需 OS X SDK 特定选项即可轻松解决此问题,方法是:

export CFLAGS="-force_cpusubtype_ALL"
LDFLAGS 中可能需要

-force_cpusubtype_ALL,但这取决于库如何使用 Autotools。对于大多数库,在 CFLAGS 中提供 -force_cpusubtype_ALL 就足够了。 PCRE 是例外。