You need to enable JavaScript to run this app. 为什么本地安装OpenSSL后,Rust构建openssl-sys v0.9.60仍然报错?
优惠活动
大模型
产品
解决方案
定价
更多

为什么本地安装OpenSSL后,Rust构建openssl-sys v0.9.60仍然报错?

核心错误原因
  • 你搞混了OpenSSL编译配置的两个路径的作用:
    • --openssldir=/usr/local/ssl 这个参数指定的是证书、加密配置文件的存放目录,不是OpenSSL程序库、头文件的安装根目录
    • OpenSSL编译时如果没显式指定--prefix,库和头文件默认会装到/usr/local/lib(部分64位系统是/usr/local/lib64)、/usr/local/include路径下,根本不会在/usr/local/ssl下面创建lib子目录,这就是构建脚本报OpenSSL library directory does not exist: /usr/local/ssl/lib的直接原因。
  • 你之前给Anaconda下的openssl二进制去掉执行权限的操作完全无效:openssl-sys是Rust侧的系统绑定,构建时直接链接磁盘上的静态/动态库文件,根本不会调用PATH路径里的openssl可执行程序,这个操作不仅解决不了问题,还可能打乱Anaconda环境本身的依赖关系。
修复操作步骤
  1. 先清掉之前配错的环境变量,避免后续路径查找冲突:
    unset OPENSSL_DIR
    
  2. 先定位你本地编译的OpenSSL实际的文件位置,别靠猜:
    • 找头文件执行:find /usr/local -name "ssl.h",能匹配到xxx/openssl/ssl.h的话,前面的xxx就是OPENSSL_INCLUDE_DIR要填的路径
    • 找库文件执行:find /usr/local -name "libssl.so",能匹配到的文件所在目录,就是OPENSSL_LIB_DIR要填的路径
  3. 给Rust构建脚本指定明确的库、头文件路径(比只设OPENSSL_DIR靠谱,不会因为子目录结构错配找不到文件):
    # 路径替换成你上一步查出来的实际值
    export OPENSSL_LIB_DIR=/usr/local/lib64
    export OPENSSL_INCLUDE_DIR=/usr/local/include
    
  4. 更新动态库加载缓存,避免程序编译完运行时找不到链接的库:
    echo "/usr/local/lib64" | sudo tee /etc/ld.so.conf.d/local-openssl.conf
    sudo ldconfig
    
  5. 清掉之前失败的openssl-sys构建缓存,重新编译:
    cargo clean -p openssl-sys
    cargo run
    
更省事的替代方案

完全没必要从源码编译OpenSSL,直接用系统包管理器装官方提供的开发包就能覆盖开发需求:

  • Debian/Ubuntu 系列:执行sudo apt install libssl-dev pkg-config
  • RHEL/Fedora/CentOS 系列:执行sudo dnf install openssl-devel pkg-config
    装完不需要额外配置环境变量,直接就能正常编译需要openssl-sys的Rust项目。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 16:36:07