从 `-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
始终如一地为 PPC
、PPC970
或 PPC7400
生成代码,我会很高兴。我切换到通用或胖二进制文件以试图完全控制情况。
四、MacG4和OSX 10.4与问题无关
最后,无需 OS X SDK 特定选项即可轻松解决此问题,方法是:
export CFLAGS="-force_cpusubtype_ALL"
在 LDFLAGS
中可能需要 -force_cpusubtype_ALL
,但这取决于库如何使用 Autotools。对于大多数库,在 CFLAGS
中提供 -force_cpusubtype_ALL
就足够了。 PCRE 是例外。
这与
我发现 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
始终如一地为 PPC
、PPC970
或 PPC7400
生成代码,我会很高兴。我切换到通用或胖二进制文件以试图完全控制情况。
四、MacG4和OSX 10.4与问题无关
最后,无需 OS X SDK 特定选项即可轻松解决此问题,方法是:
export CFLAGS="-force_cpusubtype_ALL"
在 LDFLAGS
中可能需要 -force_cpusubtype_ALL
,但这取决于库如何使用 Autotools。对于大多数库,在 CFLAGS
中提供 -force_cpusubtype_ALL
就足够了。 PCRE 是例外。