最近Git一直不正常,而且其他一些软件也似乎不正常,这个错误还非常的隐蔽,我费了好大的劲,还是靠运气才找到了毛病的所在。

When using Git, if you get a “can’t find EVP_aes_128_ctr in libssh2-1.dll” error, check whether your system has a libeay32.dll file. It may be in PATH, or it may exist in C:/Windows/System32/. Find it, and rename it, and recheck.

问题描述

在使用git clone时,如果仓库是HTTPS协议的,会失败,而且很多时候没有错误提示,只有在Windows的命令提示符(cmd)里运行才会出现,错误信息类似这样

出错信息

git-remote-ftp.exe - 无法找到入口

无法定位程序输入点 EVP_aes_128_ctr 于动态链接库 C:\msys64\mingw64\bin\libssh2-1.dll 上。

错误信息

分析和尝试

看起来问题好像是这个DLL缺少这个函数。不管三七二十一,我首先尝试的是对涉及到的包降级,无效。又参考网上给出的复制DLL的方法,无效。

折腾了很久都不行,还是靠搜索,根据这个日志,我使用的mingw-w64-x86_64-libssh2包应该是支持AES-128-ctr的,因为checking for EVP_aes_128_ctr... yes

又搜索了一下,发现一个日本朋友的blog里提到了系统中存在的libeay32.dll会git运行(这点我是靠谷歌翻译理解的)。于是顺手用whereis命令查了一下,发现不得了

1
2
whereis libeay32.dll
libeay32: /mingw64/bin/libeay32.dll /c/Windows/System32/libeay32.dll

系统里竟然还有一个libeay32.dll。

另一个libeay32.dll

文件来自何处看涂色的部分就知道了。工商银行食屎啦!

解决方法

重命名那个倒霉的文件,好了。

心得

  1. 垃圾工商银行,浪费我时间!

  2. 广泛的搜索,多尝试几种解决方法,不要想当然。

  3. 系统是很复杂的,看似和问题无关的软件可能会造成干扰。

  4. 远离国产软件告别没完没了的错误。