Shadowsocks-windows: Shadowsocks-4.0.8 Win10 无法加载 DLL“libcrypto-1_1.dll”: 找不到指定的模块

Created on 16 Feb 2018  ·  44Comments  ·  Source: shadowsocks/shadowsocks-windows

Please read Wiki carefully, especially https://github.com/shadowsocks/shadowsocks-windows/wiki/Troubleshooting.
Please answer these questions before submitting your issue. Thanks!

Version(release version or AppVeyor link)

Shadowsocks 4.0.8.0

Environment(Operating system, .NET Framework, etc)

OS 名称: Microsoft Windows 10 专业版
OS 版本: 10.0.16299 暂缺 Build 16299

Steps you have tried

程序正常启动, 试图发起连接的时候发生错误.

What did you expect to see?

What did you see instead?

Config and error log in detail (with all sensitive info masked)

[2018-02-16 11:34:03] Shadowsocks started
[2018-02-16 11:34:03] 
=========================
Registered Encryptor Info
aes-128-cfb=>StreamOpenSSLEncryptor
aes-192-cfb=>StreamOpenSSLEncryptor
aes-256-cfb=>StreamOpenSSLEncryptor
aes-128-ctr=>StreamOpenSSLEncryptor
aes-192-ctr=>StreamOpenSSLEncryptor
aes-256-ctr=>StreamOpenSSLEncryptor
bf-cfb=>StreamOpenSSLEncryptor
camellia-128-cfb=>StreamOpenSSLEncryptor
camellia-192-cfb=>StreamOpenSSLEncryptor
camellia-256-cfb=>StreamOpenSSLEncryptor
rc4-md5=>StreamOpenSSLEncryptor
salsa20=>StreamSodiumEncryptor
chacha20=>StreamSodiumEncryptor
chacha20-ietf=>StreamSodiumEncryptor
aes-128-gcm=>AEADOpenSSLEncryptor
aes-192-gcm=>AEADOpenSSLEncryptor
aes-256-gcm=>AEADOpenSSLEncryptor
chacha20-ietf-poly1305=>AEADOpenSSLEncryptor
=========================

[2018-02-16 11:34:26] System.DllNotFoundException: 无法加载 DLL“libcrypto-1_1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
   在 Shadowsocks.Encryption.OpenSSL.EVP_get_cipherbyname(Byte[] name)
   在 Shadowsocks.Encryption.OpenSSL.GetCipherInfo(String cipherName)
   在 Shadowsocks.Encryption.Stream.StreamOpenSSLEncryptor.initCipher(Byte[] iv, Boolean isEncrypt)
   在 Shadowsocks.Encryption.Stream.StreamEncryptor.Encrypt(Byte[] buf, Int32 length, Byte[] outbuf, Int32& outlength)
   在 Shadowsocks.Controller.TCPHandler.SendToServer(Int32 length, AsyncSession session)
   在 Shadowsocks.Controller.TCPHandler.StartPipe(AsyncSession session)
[2018-02-16 11:34:26] System.DllNotFoundException: 无法加载 DLL“libcrypto-1_1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
   在 Shadowsocks.Encryption.OpenSSL.EVP_get_cipherbyname(Byte[] name)
   在 Shadowsocks.Encryption.OpenSSL.GetCipherInfo(String cipherName)
   在 Shadowsocks.Encryption.Stream.StreamOpenSSLEncryptor.initCipher(Byte[] iv, Boolean isEncrypt)
   在 Shadowsocks.Encryption.Stream.StreamEncryptor.Encrypt(Byte[] buf, Int32 length, Byte[] outbuf, Int32& outlength)
   在 Shadowsocks.Controller.TCPHandler.SendToServer(Int32 length, AsyncSession session)
   在 Shadowsocks.Controller.TCPHandler.StartPipe(AsyncSession session)

Most helpful comment

简而言之:需要安装 Microsoft Visual C++ 2015 Redistributable Update 3 所提供的 vc_redist.x86.exe 。

很凑巧,网友“dz”也遇到了该问题,在他的配合下,找到了问题和办法:

该问题仅存在于使用AEAD算法的服务端,如果不连接的话,仅选择使用AEAD的服务器不会触发此问题,必须得实际通过该服务器访问一下才会出错。

如果没装Microsoft Visual C++ 2015 Redistributable Update 3的情况下,使用SS连接AEAD算法的服务器会遇到找不到 VCRUNTIME140.DLL 的提示。

如果只安装了 vc_redist.x64.exe 则会遇到 Unable to load DLL 'libcrypto-1_1.dll' 的提示。

安装 vc_redist.x86.exe 后一切正常了。

请楼上几位测试一下,看看能否解决问题,Microsoft Visual C++ 2015 Redistributable Update 3的下载地址在三楼。

All 44 comments

ss_win_temp下有libcrypto-1_1.dll文件生成吗?

另外需要安装VC运行库,因为需要VCRUNTIME140.dll https://github.com/shadowsocks/shadowsocks-windows/pull/1671#issuecomment-364612238

Microsoft Visual C++ 2015 Redistributable Update 3
https://www.microsoft.com/en-us/download/details.aspx?id=53840

模块文件生成了,VC运行库安装了
[2018-02-16 14:23:21] System.DllNotFoundException: Unable to load DLL 'libcrypto-1_1.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Microsoft Visual C++ 2008 2012 2013 2015 都已经安装
生成了 libcrypto-1_1.dll文件

Please disable antivirus and try again.

Not work. 仍然报错 System.DllNotFoundException: Unable to load DLL 'libcrypto-1_1.dll'

请尝试将Shadowsocks.exe单独放到一个新的目录中,比如 D:\SS\ 目录看看?

我这儿 Windows 7 SP1 x64 和 Windows 10 16299.248 x64 都没有问题。

EDIT:不工作。

简而言之:需要安装 Microsoft Visual C++ 2015 Redistributable Update 3 所提供的 vc_redist.x86.exe 。

很凑巧,网友“dz”也遇到了该问题,在他的配合下,找到了问题和办法:

该问题仅存在于使用AEAD算法的服务端,如果不连接的话,仅选择使用AEAD的服务器不会触发此问题,必须得实际通过该服务器访问一下才会出错。

如果没装Microsoft Visual C++ 2015 Redistributable Update 3的情况下,使用SS连接AEAD算法的服务器会遇到找不到 VCRUNTIME140.DLL 的提示。

如果只安装了 vc_redist.x64.exe 则会遇到 Unable to load DLL 'libcrypto-1_1.dll' 的提示。

安装 vc_redist.x86.exe 后一切正常了。

请楼上几位测试一下,看看能否解决问题,Microsoft Visual C++ 2015 Redistributable Update 3的下载地址在三楼。

问题解决了.

从4.07升级到4.08 我也遇到了和楼主一样的问题
只有安装Microsoft Visual C++ 2015 Redistributable Update 3 x86后才正常
是有点麻烦
不知道新程序用了哪些新特征 需要用到VC++2015?
能否将需要的文件一起打包?可以省事很多 我的同事不懂电脑 来问我 我说要下载VC++2015 他们不知道哪里去找

@chenshaoju
多谢提示, 之前别的软件也遇见, 只需要msvcp140.dll, vcruntime140.dll, msvcr120.dll.
拷贝过来就OK

安装 vc_redist.x86.exe 后问题解决!
Thanks!

@chenshaoju

需要安装 Microsoft Visual C++ 2015 Redistributable Update 3 所提供的 vc_redist.x86.exe

应该是由于整个项目依旧在使用x86target,所以dll也是32位的

@aglent
OpenSSL(libcrypto-1_1.dll)的实现具备了硬件加速能力,能提升加密解密性能。但是这个dll依赖vc运行库。然而和本软件2MB的体积相比,直接打包运行库会显得有点大。

Reopen this issue for other users' reference

@celeron533 在一些旧案例中,程序发布时可以将所需的运行库打包进去,比如一些应用所在目录下的 Microsoft.VC90.CRT 目录,或者直接附带上 msvcm90.dll 、 msvcp90.dll 、 msvcr90.dll 等等。

我不知道SS是否也可以这样做?版权上应该没什么问题,一些开源软件,比如 Blender ,也是打包了这些文件。

更新一下README.md requirement吧,或者在压缩包内增加一个说明文件。

有两个选择

一是静态库,链接到libsscrypto,这样不会有附加依赖,缺点是不能受益底层更新,微软不推荐
二是动态库,鉴于心脏出血案例把它分离出来,可随时更新,缺点依赖多

权衡之后选择了目前的方案。如果你玩游戏什么的,这些运行库都不是问题,其他的都能用得上

@celeron533 这是说4.08之前的版本都没有实现AES硬件加速?

是的

之前只有aes256gcm有aes硬件加速,来源于libsodium,mbedtls用msvc编译没有aes硬件加速,在linux下才有aesni

Win10 1709 x64 下 只要把vcruntime140.dll放入目录就可以正常运行了
@wongsyrone 你的解释我没看明白 是不是linux下都实现了aes硬件加密 win下必须调用了openssl 1.1.0g才能实现?

你读mbedtls代码就知道了

静态库能解决这类问题,不过由于静态链接进去了,要更新只能整个 exe 一起更新。不过其实按照本项目的性质,个人觉得静态库应该会比动态库好,毕竟一般不会特意用一个旧的版本,这样维护者编译时保证是最新版本就行。

原来这里有解决方案啊……

安装 vc_redist.x86.exe 解决了!!!!!!!!!!!

win10 x64 安装 vc_redist.x86.exe 解决

感谢 @chenshaoju 出厂win10 x64 安装 vc_redist.x86.exe 解决 https://github.com/shadowsocks/shadowsocks-windows/issues/1679#issuecomment-366141950

安装 Microsoft Visual C++ 2015 Redistributable (x86)
注意是X86 不是 X64

WIN 7系统 Microsoft Visual C++ 2008 2010 2012 2013 2015 x86 x64都已经安装
仍然报错 System.DllNotFoundException: Unable to load DLL 'libcrypto-1_1.dll'

请尝试再次安装 VC++ 2015 x86 https://www.microsoft.com/en-us/download/details.aspx?id=53840

安装的时候请选择修复安装。

某些系统可能需要重新启动。

https://www.upload.ee/files/8213603/Shadowsocks-4.0.9.zip.html
整合必须文件打包, win10未测试

4.09版本打开报错System.DllNotFoundException: Unable to load DLL 'libcrypto-1_1.dll'
4.06版本前两次打开可以正常使用,但是现在开启全局代理后报错500 Internal Privoxy Error,无法上网
目前测试结果可能是因为多个用户使用导致,请问多个用户使用的话如何避免这种问题

@EugeneYX 建议为每个用户设置一个独立的SS目录,并监听在不同的端口上。

或者只有一个人能用SS,然后其他人都将代理指向同一个端口上。

另外,是否已经修复安装并重新启动计算机?

并未重启计算机,可以正常翻墙的计算机重启shadowsocks后可以继续使用
因为是新手第一次接触这方面,请问如何为用户设立独立的SS目录

复制多个 Shadowsocks.exe ,放入不同的目录,并修改 gui-config.json 为其分配不同的端口即可。

然后告知用户使用不同目录中的SS即可,或者放入每个用户独立的桌面上,路径通常是:

C:\Users\<用户名>\Desktop\

请不要在这种场合公开你的QQ号,没人能保证加你的人就是你希望的那个人。

简单地说,就是复制多份Shadowsocks,分发给不同的人使用。

感谢您的提醒,因为刚接触shadowsocks,除了教程其他问题暂时还不能理解,就如如何复制shadowsocks,可能需要详细讲述下步骤才行

将 Shadowsocks.exe 放入一个目录中,比如 TEST1 并进入,然后启动 Shadowsocks.exe 配置。

配置完毕后,将 TEST1 目录复制一份,比如 TEST2 ,然后进入 TEST2 目录,双击 Shadowsocks.exe 修改本地端口号或进行其他配置。

以此类推。

意思是修改代理端口为其他值么?

对,就是SS编辑服务器界面右下角的代理端口。

万分感谢,分配后目前暂未出现掉线问题

4.0.9 已静态编译,应该不会有这个依赖问题了

@celeron533 测试通过,4.0.10没问题,这个issue可以关了

Was this page helpful?
0 / 5 - 0 ratings