问题产生:
git clone https://github.com/NVlabs/cub.git
fatal: Unable to find remote helper for 'http/https'
or
fatal: unable to access 'https://github.com/**.git/': Protocol "https" not supported or disabled in libcurl
问题原因:
git 依赖 curl, curl 依赖 openssl
解决办法
- 尝试重装git无效
- 尝试重装curl, 再重装git无效, 不过此时提示,似乎发现了什么原因…
Protocol "https" not supported or disabled in libcurl
-源码编译openssl
curl
git
最后完美解决
1. 最简单办法
改变git 克隆地址像下面这样操作
git clone git@github.com:NVlabs/cub.git
将前面的改成 即可,大部分用户修改后都能clone成功。
但是我这种情况,使用此方法无法解决问题(即使修改完所有仓库地址,还会有子仓库的情况,导致clone出错,所以请请接着下看~~)
2. 确认是否缺少git-remote-https
sudo find / -name git-remote-https
--> /usr/local/libexec/git-core/git-remote-https
如果出现上面情况,显示出git-remote-https
所在路径,那么很简单,将/usr/local/libexec/git-core/*
拷贝到/usr/local/bin
, 重开终端即可
sudo cp /usr/local/libexec/git-core/* /usr/local/bin/
当然,大部分用户是搜索不出来的…
因为系统压根没装相关依赖库…
那么请接着往下看
3. 编译openssl
点击 官方网站 下载如下版本, 也可直接点击此处下载对应版本
openssl-1.1.1g.tar.gz
tar zxf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/usr/local
make -j4
sudo make install
4. 编译curl
点击 官方网站 下载如下版本, 也可直接点击此处下载对应版本
curl-7.71.1.tar.gz
tar zxf curl-7.71.1.tar.gz
cd curl-7.71.1
# --with-ssl 参数设置为上一步中编译的open-ssl安装路径
./configure --prefix=/usr/local --with-ssl=/usr/local
# 结果如下
-->
...curl version: 7.71.1SSL: **enabled (OpenSSL)**SSH: no (--with-{
libssh,libssh2})zlib: enabledbrotli: no (--with-brotli)GSS-API: no (--with-gssapi)SSH: no (--with-{
libssh,libssh2})zlib: enabledbrotli: no (--with-brotli)GSS-API: no (--with-gssapi)...HTTP2: disabled (--with-nghttp2)HTTP3: disabled (--with-ngtcp2, --with-quiche)ESNI: no (--enable-esni)Protocols: DICT FILE FTP FTPS GOPHER **HTTP HTTPS** IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
显示 SSL: enabled (OpenSSL)
和最后一行中显示HTTP HTTPS
即表示ok
然后接着继续编译
make -j4
sudo make isntall
如果编译过程中出现如下错误
vtls/openssl.c:438:15: error: implicit declaration of function ‘RAND_egd’; did you mean ‘RAND_add’? [-Werror=implicit-function-declaration]int ret = RAND_egd(data->set.str[STRING_SSL_EGDSOCKET]?
是因为电脑里已经安装了openssl,将其卸载即可参考
# centos
sudo yum remove openssl-devel
# ubuntu
sudo apt-get remove libssl-dev
如果出现如下错误
checking run-time libs availability... failed
configure: error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lssl -lcrypto -lz
则说明本机安装的ssl路径有问题,将其添加到环境变量即可
查看/usr/local/openssl
/usr/local/ssl
/usr/local/lib64
下是否有相应的libssl.so
库
已经发现centos下动态库可能会装到/usr/local/openssl
或/usr/local/lib64
下
例如我的机器装到了/usr/local
下,那么可执行文件在/usr/local/bin/
下, 动态库在/usr/local/lib64
下,那么我将按照如下方式添加环境变量
echo "export PATH=\"\$PATH:/usr/local/bin\"" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=\"/usr/local/lib64\"" >> ~/.bashrc
source ~/.bashrc
ldconfig
5. 编译git
点击 github git 官网 下载如下版本, 也可直接点击此处下载对应版本
git-2.27.0.zip
解压编译
unzip zxf git-2.27.0.zip
cd git-2.27.0
yum install autoconf
make configure
./configure prefix=/usr/local
make -j4
sudo make install
在make -j4
的时候如果出现找不到各种符号,那么就是链接libcurl.so
的时候,链接到了系统的libcurl.so
, 可以echo $PATH
查看路径, 或者执行curl --version
打印出版本号不是我们刚刚编译的版本号,那么证明系统已经有了curl,那么我们只需要按照如下操作即可,改变环境变量里面路径的先后顺序即可
echo "export PATH=\"/usr/local/bin:\$PATH\"" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=\"/usr/local/lib:\$LD_LIBRARY_PATH\"" >> ~/.bashrc
source ~/.bashrc
6. 测试
重开命令行测试
(base) [swls@MiWiFi-R3-srv ~]$ git clone https://github.com/NVlabs/cub.git
Cloning into 'cub'...
remote: Enumerating objects: 33207, done.
^Cceiving objects: 9% (3154/33207), 1.61 MiB | 220.00 KiB/s
完美解决!!!