如何在Windows开发环境中使用OpenSSL for Rust

问题描述 投票:0回答:1

当我在货物文件中添加SSL依赖项时,我无法构建我的Rust项目。这对Windows来说并不陌生,但我想解决这个问题,以便我可以使用Powershell和本机Windows开发来处理我的Rust项目。

有问题的依赖关系如下:

[dependencies.ws]
version = "0.8.0"
features = ["ssl"]

当我运行cargo build时,我在Windows上遇到很多关于SSL的错误,所以让我们一步一步地开始调试。

第一个错误:

PS C:\Users\sam\vcs\project> cargo build
   Compiling openssl-sys v0.9.43
error: failed to run custom build command for `openssl-sys v0.9.43`
process didn't exit successfully: `C:\Users\sam\vcs\project\target\debug\build\openssl-sys-d964f46e4c48d206\build-script-main` (exit code: 101)
--- stdout
cargo:rustc-cfg=const_fn
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_MSVC_OPENSSL_LIB_DIR
X86_64_PC_WINDOWS_MSVC_OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_MSVC_OPENSSL_INCLUDE_DIR
X86_64_PC_WINDOWS_MSVC_OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_MSVC_OPENSSL_DIR
X86_64_PC_WINDOWS_MSVC_OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_DIR
OPENSSL_DIR unset
note: vcpkg did not find openssl as libcrypto and libssl: Aborted because VCPKGRS_DYNAMIC is not set
note: vcpkg did not find openssl as ssleay32 and libeay32: Aborted because VCPKGRS_DYNAMIC is not set

好吧,让我们设置qazxsw poi,qazxsw poi和qazxsw poi

OPENSSL_LIB_DIR

但是,现在运行OPENSSL_INCLUDE_DIROPENSSL_DIR实际编译,但我不认为SSL工作正常,因为连接到websocket的代码路径失败,错误无。

我从以下网站安装了最新的(1.1.0j)完整(非超薄)OpenSSL版本:$env:OPENSSL_LIB_DIR="C:\OpenSSL-Win64\lib" $env:OPENSSL_INCLUDE_DIR="C:\OpenSSL-Win64\include" $env:OPENSSL_DIR="C:\OpenSSL-Win64"

它设置的唯一环境变量是:

cargo build

但我也加入了cargo run到我的https://slproweb.com/products/Win32OpenSSL.html

OPENSSL_CONF: C:\OpenSSL-Win64\bin\openssl.cfg 实际编译时,websocket失败并出现错误C:\OpenSSL-Win64\bin

PATH块在我的Windows机器上执行,但我的Linux机器从不执行此代码块。

就这样我们在同一页面上,这是print语句的输出:

cargo build

没有不是一个非常具有描述性的答案。所以我认为我只需要一些证书,因为OpenSSL没有证书。我从网上某处下载了一个cacert.pem并将其放入OpenSSL安装的certs文件夹中,但这也没有太大的区别。仍然是相同的None错误。

在我的Linux机器上,我希望websocket连接成功,并使代码继续到on_error

fn on_error(&mut self, err: ws::Error) {
    println!("On Error, {}", err)
}

有没有人在他们的Windows开发环境中解决这个OpenSSL问题?


更新0

根据Cloud的建议,我尝试使用VCPKG。不幸的是它没有用。

None

然后我在powershell窗口中设置变量:

on_open

然后我运行fn on_open(&mut self, _: ws::Handshake) -> ws::Result<()> { ... } 然后PS C:\Users\sam\vcs\vcpkg> .\vcpkg.exe list openssl-windows:x64-windows-static 1.0.2q-2 OpenSSL is an open source project that provides ... openssl-windows:x86-windows 1.0.2q-2 OpenSSL is an open source project that provides ... openssl:x64-windows-static 0 OpenSSL is an open source project that provides ... openssl:x86-windows 0 OpenSSL is an open source project that provides ... 我仍然得到相同的错误,我的websocket投掷错误PS C:\Users\sam\vcs\project> $env:OPENSSL_DIR = 'C:\Users\sam\vcs\vcpkg\installed\x64-windows-static' PS C:\Users\sam\vcs\project> $env:OPENSSL_STATIC = 'Yes' PS C:\Users\sam\vcs\project> $env:VCPKGRS_DYNAMIC='1'

这里仍然没有运气。

windows visual-studio-code rust openssl rust-cargo
1个回答
0
投票

C / C ++库的货物构建逻辑实际上非常简单,它只是编译一个生锈程序,它搜索包含路径和库,然后产生一些文本输出,货物将消耗它。

cargo clean我可以看到一些cargo build关键字,然后我建议你只需使用None来解决所有的依赖关系,并摆脱那些env变量。

© www.soinside.com 2019 - 2024. All rights reserved.