【问题标题】:Can't build Rustless on Windows无法在 Windows 上构建 Rustless
【发布时间】:2016-12-24 14:15:44
【问题描述】:

我正在尝试构建不锈的"basic usage" sample project

这是我的 Cargo.toml。为了避免构建错误error[E0463]: can't find crate for 'hyper'

,我不得不在 Cargo.toml 中添加依赖项
[package]
name = "rustlessTest"
version = "0.1.0"
authors = ["x"]

[dependencies.rustless]
git = "https://github.com/rustless/rustless"

[dependencies]
hyper = "0.9.14"
iron = "0.4.0"
rustc-serialize = "0.3.22"
valico = "1.0.1"

我还下载了 OpenSSL 库和源代码。我将它们存储在C:\OpenSSL\lib and C:\OpenSSL\include 下并将目录设置为环境变量,正如this thread 关于如何在Windows 上使用Hyper 中所述。

当我尝试编译时,它失败并显示以下输出:

Build failed, waiting for other jobs to finish...
error: failed to run custom build command for `openssl v0.7.14`
....
....

【问题讨论】:

  • 使用cargo -vv build 获取更多信息。

标签: windows openssl rust


【解决方案1】:

我终于通过关注the solution from this blog post 在 Windows 上构建了 OpenSSL。

总结如下:

  1. here下载Win64 OpenSSL v1.0.1u。使用默认设置安装它。
  2. 设置以下环境变量

    DEP_OPENSSL_INCLUDE=C:\OpenSSL-Win64\include
    OPENSSL_INCLUDE_DIR=C:\OpenSSL-Win64\include
    OPENSSL_LIB_DIR=C:\OpenSSL-Win64\lib\VC
    OPENSSL_LIBS=ssleay32MT:libeay32MT
    
  3. 安装 Visual Studio 2015 或支持 C++ 的 Visual Studio Code。

  4. 确保所有路径变量都设置正确

  5. rust-msvc 设置为工具链。您可以通过在控制台中输入rustup show 来检查这一点。你应该得到这样的输出:

    Default host: x86_64-pc-windows-msvc
    
    stable-x86_64-pc-windows-msvc (default)
    rustc 1.13.0 (2c6933acc 2016-11-07)
    

现在您应该能够构建需要 OpenSSL 的 Rust 项目了。

【讨论】:

    【解决方案2】:

    你是对的,因为没有找到 OpenSSL。 rust-openssl 的 README 中有一个很好的教程。

    Windows MSVC

    不幸的是,在 MSVC 上,获取过程并不总是一个简单的过程 OpenSSL。也许现在最简单的方法是下载 precompiled binaries 并将它们安装在您的系统上。目前是 如果您是,建议安装 1.1.0(非轻型)安装 选择这条路线。

    一旦安装了预编译的二进制文件,您就可以将这个 crate 配置为 通过环境变量找到安装:

    set OPENSSL_DIR=C:\OpenSSL-Win64
    

    请注意,此 OpenSSL 发行版不附带任何根 证书。所以要向互联网上的服务器发出请求,你有 手动安装它们。下载cacert.pem file from here, 将其复制到安全的地方(C:\OpenSSL-Win64\certs 是个好地方)和 将SSL_CERT_FILE 环境变量指向那里:

    set SSL_CERT_FILE=C:\OpenSSL-Win64\certs\cacert.pem
    

    在那之后,你就只有cargo build了!

    Windows GNU (MinGW)

    使用 MinGW 时获取 OpenSSL 的最简单方法是 确保你使用MSYS2 然后 执行:

    # 32-bit pacman -S mingw-w64-i686-openssl
    
    # 64-bit pacman -S mingw-w64-x86_64-openssl
    

    然后,cargo build 应该就是你所需要的!

    手动配置

    rust-openssl 的构建脚本默认会尝试定位 OpenSSL 通过 pkg-config 或其他系统特定的机制。这行不通 然而,在某些情况下,例如交叉编译或使用 除了正常系统安装之外的 OpenSSL 副本。

    可以通过环境变量配置构建脚本:

    • OPENSSL_DIR - 如果指定,将用于查找 OpenSSL 安装的目录。预计在该目录下 include 文件夹有头文件,lib 文件夹有运行时 图书馆。
    • OPENSSL_LIB_DIR - 如果指定,将用于查找 OpenSSL 库的目录。覆盖lib 隐含的文件夹 OPENSSL_DIR(如果指定)。
    • OPENSSL_INCLUDE_DIR - 如果指定,将用于查找 OpenSSL 头文件的目录。覆盖隐含的include 文件夹 OPENSSL_DIR(如果指定)。
    • OPENSSL_STATIC - 如果指定,OpenSSL 库将静态链接而不是动态链接。

    如果指定了OPENSSL_DIR,那么构建脚本将跳过 pkg-config 步骤。

    这是一场噩梦;带有 Windows 的 OpenSSL 真的很痛苦。我希望有一天 Rust 有自己的 SSL/TLS 实现。

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 2022-12-18
      • 2020-07-02
      • 2011-10-17
      相关资源
      最近更新 更多