e2ge
e2ge
安装openssl并指定了OPENSSL_DIR=C:\\OpenSSL-Win64后openssl的问题解决,但是libsodium-ffi编译不过。 问题是: Compiling libsodium-ffi v0.1.11 error: failed to run custom build command for `libsodium-ffi v0.1.11` process didn't exit successfully: `C:\Users\xxx\Documents\vscode\shadowsocks-rust\target\release\build\libsodium-ffi-20e72ec3a1921665\build-script-build` (exit code: 101) --- stdout cargo:rerun-if-env-changed=SODIUM_LIB_DIR cargo:rerun-if-env-changed=SODIUM_STATIC cargo:rerun-if-env-changed=SODIUM_BUILD_STATIC Building libsodium...
手动下载libsodium-1.06-msvc 编译: OPENSSL_DIR=C:\\OpenSSL-Win64 OPENSSL_STATIC=yes SODIUM_BUILD_STATIC=yes SODIUM_LIB_DIR=C:\\libsodium-1.0.16-msvc\\x64\\Release\\v141\\static cargo build --release libsodium-ffi可以编译通过,但是最后link出现错误: = note: LINK : fatal error LNK1181: cannot open input file 'sodium.lib' 用 SODIUM_LIB_DIR=C:\\libsodium-1.0.16-msvc\\x64\\Release\\v141\\static cargo build --release 单独编译libsodium-ffi发现release文件夹下面出现liblibsodium.d和liblibsodium.rlib 多了一个lib,不知道是不是这个问题。
看了你的appveyor,没感觉有什么不同。 不指定SODIUM_LIB_DIR,就提示ps版本不对,需要大于4.0 指定SODIUM_LIB_DIR,最后link错误 可能是win7的原因?appveyor可能win版本更高一些吧。
在win7上安装ps5.1就可以了,看来指定SODIUM_LIB_DIR不work。 ps5.1下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=54616 msys2编译命令: OPENSSL_DIR=C:\\\OpenSSL-Win64 OPENSSL_STATIC=yes SODIUM_BUILD_STATIC=yes cargo build --release
在mingw64下也可以编译通过 toolchain:stable-x86_64-pc-windows-gnu 安装mingw-w64-x86_64-openssl,mingw-w64-x86_64-gcc,mingw-w64-x86_64-pkg-config 然后SODIUM_BUILD_STATIC=yes cargo build --release 开始的时候用的msys2的gcc,版本太低,总是出现gcc错误,后来发现pkg-config也必须用mingw64版,不然会报找不到lssl,lz和lcrypt
我稍微总结一下吧,因为我用的是win7,可能在win10系统中不会出现类似的问题。 msvc abi编译环境:vs 2015+powershell 5.1+openssl 1.1.0h shell用msys2或cmd都可以,只需要注意%HOMEPATH%\\.cargo\bin在环境变量里就可以。 ps5.1下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=54616 msys2编译命令: ~~OPENSSL_DIR=C:\\\OpenSSL-Win64 OPENSSL_STATIC=yes SODIUM_BUILD_STATIC=yes cargo build --release~~ OPENSSL_LIB_DIR=C:\\\OpenSSL-Win64\\lib\\\VC\\\static OPENSSL_LIBS=libcrypto64MT:libssl64MT OPENSSL_INCLUDE_DIR=C:\\\OpenSSL-Win64\\\include OPENSSL_STATIC=yes SODIUM_BUILD_STATIC=yes cargo build --release (cmd需要使用set) 遇到的错误和解决办法: 1. 缺少OpenSSL(安装openssl并指定OPENSSL_DIR=C:\OpenSSL-Win64) 2. 缺少libsodium(增加SODIUM_BUILD_STATIC=yes) 3....
@DeepAQ Because MSVC uses a different C++, you should specify the openssl dll of msvc version. You should download openssl and install in a location such as C:\\\OpenSSL-Win64 and compile...
我试了一下,gnu和msvc都是可以编译的。 安装LLVM:http://releases.llvm.org/9.0.0/LLVM-9.0.0-win64.exe 会自动提示设置Path 安装openssl:https://slproweb.com/products/Win32OpenSSL.html gnu的话用mingw: `OPENSSL_DIR=C:\\OpenSSL-Win64 OPENSSL_STATIC=yes SODIUM_BUILD_STATIC=yes cargo build --release` msvc用cmd: 创建一个简单的bat文件: ``` set "OPENSSL_LIB_DIR=C:\OpenSSL-Win64\lib\VC\static" set "OPENSSL_LIBS=libcrypto64MT:libssl64MT" set "OPENSSL_INCLUDE_DIR=C:\OpenSSL-Win64\include" set "OPENSSL_STATIC=yes" set "SODIUM_BUILD_STATIC=yes" cargo build --release pause ``` 保存到shadowsocks-rust文件夹,双击就开始编译了。
libsodium-ffi改成了libsodium-sys,那"SODIUM_BUILD_STATIC=yes"应该没什么用了吧?
@bigtan vcpkg是比较方便。最新1.8.0版本sodium改成libsodium-sys,这样的vcpkg应该就没有必要再安装静态libsodium了吧? @zonyitoo Dockerfile使用的还是gnu abi,其实我也不清楚msvc和gnu性能上有没有差别,文件size上倒是没什么差别。说不定有人就是想用msvc呢😂