2015-08-29 21 views
0

这与Git 2.4.8 built from kernel.org sources and missing HTTP/HTTPS helpers有关。从`-arch ppc`改变为`-arch ppc7400`的原因?

我发现cURL的库被有效地配置为-arch ppc -arch ppc64,但是构建的胖库具有体系结构-arch ppc7400 -arch ppc64。这导致Git配置/链接失败,所以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" *来刷新cURL来源,但是我找不到变化的来源。

可能是由-arch ppc改为-arch ppc7400的原因是什么?

回答

3

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

我注意到,如果你正在构建通用的(即如果你还在为另一个架构同时构建的话),ppc到ppc7400的翻译才会发生。我不确定为什么它只在建造一个拱门时不这样做。

+0

*真的很奇怪的事情是八(或其他)依赖库使用相同的步骤建立良好。我不明白为什么我只在cURL下看到这个问题,而不是Zlib,Bzip,iConv,PCRE,OpenSSL等等...... – jww

+0

@jww最有可能的是工作依赖关系的构建脚本已经有一个较低的'MACOSX_DEPLOYMENT_TARGET '集合。 –

0

从-arch ppc到-arch ppc7400的变化可能是什么原因?

瑞安是正确的关于“......编译器已经改变了你的PPC -arch要求到-arch ppc7400以产生最佳的代码”。其记录在GCC手册3.17.10 Darwin Options

但是,答案中的其他一些陈述并不完全是针对性的,所以我需要提供一个答案来澄清它们,以防其他人发现问题和答案有用。首先,硬件是Mac G5,而不是G4。

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

三,我遇到了一个标准的问题./configure && make;和不是通过调用通用或胖二进制文件。如果所有库和程序中的./configure && make始终生成PPCPPC970PPC7400的代码,我会很高兴。为了全面掌握情况,我转而使用通用或胖二进制文件。

四,Mac G4和OS X 10.4与这个问题无关。

最后,这个问题可以通过使用可以解决很轻松了,而不OS X SDK的特定选项:

export CFLAGS="-force_cpusubtype_ALL" 

-force_cpusubtype_ALL可以在LDFLAGS是必要的,但它依赖于库如何使用自动工具。对于大多数库,只需在CFLAGS中提供-force_cpusubtype_ALL就足够了。 PCRE是该规则的例外。