这类似于git clone: fatal:无法为'https'找到远程助手。这和其他类似的问题有点不同。另一个类似的问题是在Ubuntu上,它有一个提供最新组件的包管理器。
这个设置基本上是一个废弃的操作系统。没有现有的Git,也没有可用的包管理器(如Yum、Apt-Get、Homebrew或Macports)。Git和cURL所需的一切都是从头开始构建并安装在/usr/local
中,它包括:
- libz (Zlib库)libssl和libcrypto (OpenSSL库)
- libidn (IDN library)
- libiconv (iConvert library) libpcre (PERL RE库)libcurl (cURL库)
我使用下面的cURL配方。cURL同时支持HTTP和HTTPS。cURL配置、构建、测试和安装都很好。
我对Git使用了下面的配方。Git配置和构建都很好。根据configure --help
,我只需要调用cURL来获得HTTP和HTTPS支持:
$ ./configure --help | egrep -i "(http|openssl)" --with-openssl use OpenSSL library (default is YES) ARG can be prefix for openssl library and headers --with-curl support http(s):// transports (default is YES)
但是,Git在尝试通过HTTP和HTTPS执行克隆时失败。我从零开始构建了两次,所以不管我做错了什么,我现在已经做了两次了。
为什么Git不能构建它需要的帮助程序?
Git配方
curl -k https://www.kernel.org/pub/software/scm/git/git-2.4.8.tar.gz -o git-2.4.8.tar.gz
tar zf git-2.4.8.tar.gz
cd git-2.4.8
make configure
sed -i "" 's|-lcrypto|/usr/local/lib/libcrypto.a|g' configure.ac configure Makefile
sed -i "" 's|-lssl|/usr/local/lib/libssl.a|g' configure.ac configure Makefile
sed -i "" 's|-lcurl|/usr/local/lib/libcurl.a|g' configure.ac configure Makefile
sed -i "" 's|-lpcre|/usr/local/lib/libpcre2-posix.a|g' configure.ac configure Makefile
./configure --with-openssl=/usr/local --with-libpcre=/usr/local --with-curl=/usr/local
--with-zlib=/usr/local --with-iconv=/usr/local --prefix=/usr/local
旋度配方
curl -k http://curl.haxx.se/download/curl-7.44.0.tar.gz -o curl-7.44.0.tar.gz
tar zf curl-7.44.0.tar.gz
cd curl-7.44.0
sed -i "" 's|-lidn|/usr/local/lib/libidn.a|g' configure.ac configure lib/Makefile.m32 src/Makefile.m32
./configure --enable-optimize --disable-ldap --disable-ldaps --disable-rtsp --disable-dict
--disable-ntlm-wb --disable-tls-srp --enable-http --enable-file --enable-proxy
--enable-telnet --enable-tftp --enable-pop3 --enable-imap --enable-ftp --enable-smb
--enable-smtp --enable-gopher --enable-manual --enable-ipv6 --enable-unix-sockets
--enable-cookies --without-darwinssl --without-libssh2 --without-winidn --with-gnu-ld
--with-libidn=/usr/local --with-glib=/usr/local --with-ssl=/usr/local
--with-ca-path=/usr/share/curl --prefix=/usr/local
对食谱中sed
的调用确保我使用静态链接。它在OS X上是必需的,因为苹果总是使用*.dylibs
,如果它们可用的话(即使有-Bstatic
这样的选项)。更糟糕的是,这是一台在PowerPC上运行OS X 10.5的老式PowerMac。它用于在处理器上测试软件。
为什么Git不能构建它需要的帮助程序?
似乎至少有两个问题。首先,Git的配置不会报告错误。相反,它会默默地吞下它们。它也无声地吞下了PCRE库的错误。
第二,cURL架构-arch ppc
被更改为-arch ppc7400
。所以这8个左右的依赖库是这样的:
$ file /usr/local/lib/libcrypto.a
/usr/local/lib/libcrypto.a: Mach-O universal binary with 2 architectures
/usr/local/lib/libcrypto.a (for architecture ppc): current ar
archive random library
/usr/local/lib/libcrypto.a (for architecture ppc64): current ar
archive random library
但是cURL看起来像:
$ file /usr/local/lib/libcurl.a
/usr/local/lib/libcurl.a: Mach-O universal binary with 2 architectures
/usr/local/lib/libcurl.a (for architecture ppc7400): current ar
archive random library
/usr/local/lib/libcurl.a (for architecture ppc64): current ar
archive random library
我验证了它不是我的设置:
export CFLAGS="-arch ppc"
./configure ...
make
:
$ find . -name libcurl.a
./lib/.libs/libcurl.a
$ lipo -info ./lib/.libs/libcurl.a
...
Non-fat file: ./lib/.libs/libcurl.a is architecture: ppc7400
export LDFLAGS="-arch ppc"
对这个问题没有影响。
有一个相关的,后续的问题是跟踪从-arch ppc
到-arch ppc7400
的变化原因的行为?