首页新闻找找看学习计划

文件libcurl.dll导致无法克隆github中的代码仓库问题

0
悬赏园豆:10 [已解决问题] 解决于 2015-09-08 09:21

昨天尝试使用git克隆github中的代码仓库失败,报错误“fatal: unable to access 'https://github.com/myname/study.git/': Protocol https not supported or disabled in libcurl”。

晚上查看解决方法,发现只要删除文件“C:\Windows\SysWOW64\libcurl.dll”即可。

问题是我在计算机上搜索libcurl.dll时,发现多处存在此文件,包括很多软件的安装目录,包括git的安装目录(如下图)。

我的问题是:

1.  我删除libcurl.dll文件,是否会对我的系统以后的运行产生影响?如何解决?

2.  既然git的安装目录已经存在libcurl.dll文件,为什么“SysWOW64”下的libcurl.dll文件还会对git的工作产生影响?

3.  libcurl.dll作用是什么?

问题补充:

“C:\Windows\SysWOW64\libcurl.dll”与git自带的“libcurl.dll”,有什么不同?

闫冬 的地盘的主页 闫冬 的地盘 | 菜鸟二级 | 园豆:218
提问于:2015-08-14 07:34
< >
分享
最佳答案
1

git.exe 也是在 C:\Pro....\Git\Bin 目录下吗?

收获园豆:10
Launcher | 高人七级 |园豆:44980 | 2015-08-14 09:21

是的,只在“[git]\bin”和“[git]\cmd”中,存在git.exe。

不过,在系统变量的PATH中,只应用了“[git]\bin”。(但是这个路径引用了两边)

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-14 09:31

@闫冬 的地盘: 你已经删除了 SysWOW64 目录下的 libcurl.dll,那么你现在再把 git\bin 目录下的 libcurl.dll 也删除了,你再看看能 git 能访问 https 不?如果能访问,你再检查下 git\bin 目录下是否有 libcurl.dll。

Launcher | 园豆:44980 (高人七级) | 2015-08-14 09:54

@Launcher: 删除 [git]/bin/libcurl.dll后再进行git clone,报错“找不到libcurl.dll”,不会再自动创建此文件;然后我将[SysWOW64]/libcurl.dll还原(git中的libcurl还处于删除状态),执行“git clone”,依旧报错:“Protocol https not supported or disabled in libcurl”。

基本可以定位:在git clone时,优先使用“SysWOW64”中的libcurl.dll,其次使用git自带的libcurl.dll。

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-14 10:15

@闫冬 的地盘: 动态链接库的搜索路径优先级为:应用程序所在目录→当前目录→Windows SYSTEM目录→Windows目录→PATH环境变量指定的路径。

如果使用 LoadLibrary 的话,应用程序可以自己调整搜索动态链接库的路径顺序。

 

libcurl 是开源的网络客户端库,支持多种协议,比如 HTTP,HTTPS ,FTP,FTPS 等,很多开发者会自己使用源码编译,而 libcurl 也允许开发者编译时指定一些参数,启用或禁用某些功能。你遇到的问题就是 SysWOW64 目录下的 libcurl.dll 编译时禁用了 SSL 功能。

Launcher | 园豆:44980 (高人七级) | 2015-08-14 10:43

@Launcher: 这正是我当前疑惑的地方。命令git有自己的libcurl.dll,怎么还会因为[SysWOW64/libcurl.dll]的存在而导致“git clone”失败?

刚刚,我又做了一个实验:删除[git]/bin/git.exe,然后运行指令“git help”,结果报错:'git' 不是内部或外部命令,也不是可运行的程序或批处理文件。由此可见,控制台中git指令的目标程序就是[git]/bin/git.exe。

而这里也确实存在一个文件:[git]/bin/libcurl.dll。

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-14 10:55

@闫冬 的地盘: 你在“运行”中输入“cmd”,然后输入:cd C:\Program Files (x86)\Git\bin,然后输入 git.exe。

Launcher | 园豆:44980 (高人七级) | 2015-08-14 10:58

@Launcher: 在git.exe存在的情况下,进行您要求的操作,结果如下图:

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-14 11:04

@闫冬 的地盘: 少说一句,访问 https,看它搜索 dll 的优先级。

Launcher | 园豆:44980 (高人七级) | 2015-08-14 11:05

@Launcher: 很抱歉,我并没有找到 “访问https,查看它搜索dll的优先级” 的实现方式。它需要什么指令或操作来实现呢?
git.exe https://...   : 这是一个错误的指令,git不能识别。

git.exe clone ...      : 此指令得到的结果与“git clone”,没有区别。

直接运行git.exe,弹出的控制台窗口会立刻关闭。

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-14 11:27

@闫冬 的地盘: 那你“昨天尝试使用git克隆github中的代码仓库失败”这个是怎么做的呢?

http://hubingforever.blog.163.com/blog/static/171040579201241955252151/

Launcher | 园豆:44980 (高人七级) | 2015-08-14 11:44

@Launcher: 我可以通过指令“git.exe clone”实现一次git访问https,但是我如何“查看它搜索dll的优先级”呢?

通过之前的验证方式,再来一次吗?即先删除SysWOW64中的文件,执行一次;再删除git中的libcurl.dll文件,执行一次。

这样的话,我预计,结果和之前的验证也接过没有什么不同。因为之前通过另一个实验已经证明了,“git”命令,启动的就是程序:git.exe。

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-14 12:08

@闫冬 的地盘: 对。如果还一样,你用 depends.exe 查看 git.exe 依赖的 dll 中有没有 libcurl.dll,以及路径是什么。还是要分 SysWOW64 目录和 git\bin 目录查看。

Launcher | 园豆:44980 (高人七级) | 2015-08-14 13:04

@Launcher: 

您好!工具depends.exe我前天用过了,可惜没有找到有用的信息,因为它给出的列表中找不到libcurl.dll。在使用这个工具解析“git.exe”时,报了一些错误,我估计是这些错误导致的“找不到libcurl.dll”。因为我现在使用的不是前天的电脑,所以具体截图也没有。

不过昨天我又在另一台电脑上安装了git,没有进行任何特殊的修改,就可以正常使用git clone命令。我刚刚找了一下它与上一台电脑的不同点。发现两处:

1. 它调用的是[git]/cmd中的git.exe文件。不是[git]/bin中的git.exe。(虽然它在bin中也有这个文件)

2. [SysWOW64]中没有libcurl.dll文件。

所以我怀疑两点:上一台电脑中,调用的文件git.exe错了;上一台电脑中libcurl.dll不是系统自带的,而是后来安装软件产生的。解决这两个疑点我需要明天才能验证。

不知道这两点信息对于解释“关于git.exe调用动态链接库libcurl.dll顺序异常”,有没有提供一些思路。

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-16 17:31

@闫冬 的地盘: [git]/cmd 目录下有 libcurl.exe 吗?

Launcher | 园豆:44980 (高人七级) | 2015-08-17 09:26

@闫冬 的地盘: 工具depends.exe我前天用过了,可惜没有找到有用的信息,因为它给出的列表中找不到libcurl.dll

-> 从 git.exe 的所有非系统 dll 依赖项中去查找,如果都没有,那么 git.exe 就是使用 LoadLibrary 来调用 libcurl 的,然后 libcurl 还有个 shell 工具,这个 shell 工具是个 exe,你在git/bin 下找找。如果 git.exe 调用 licurl shell 工具来请求的话,也不会有依赖 libcurl.dll 的情况出现。

Launcher | 园豆:44980 (高人七级) | 2015-08-17 09:28

@Launcher: 很抱歉,这个帖子耽误到现在。原来打算找学习C/C++的朋友帮忙,怎么使用您说的工具depends.exe。但到了现在,一直没有成果。如今,已经没有深究下去的意愿了。

但是,依旧十分感谢您的解答,某种程度上来说,你的精炼的解答为我打开了另一扇门。谢谢!

闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-09-08 09:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册