V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kyonn
V2EX  ›  程序员

rust 如何处理 openssl 的依赖?

  •  
  •   kyonn · 18 小时 16 分钟前 · 651 次点击

    为了让二进制能跑在主流发行版上, 现在用的 cargo zigbuild --target x86_64-unknown-linux-gnu.2.17 --release 编译.

    有个问题, 如果依赖的库用了 openssl, 一直提示 cargo:warning=build/expando.c:2:10: fatal error: 'openssl/opensslconf.h' file not found

    系统是 debian11, 已安装 libssl-dev pkg-config. 直接用 cargo build 能编译过的, 用 zigbuild 就不行. 因为依赖的库只能依赖 openssl, 不支持 rustls, 有没有比较好的解决办法?

    7 条回复    2025-01-21 20:09:35 +08:00
    kyonn
        1
    kyonn  
    OP
       18 小时 6 分钟前
    .... 主动添加下 openssl 依赖就解决了, cargo add openssl --features vendored
    kyonn
        2
    kyonn  
    OP
       18 小时 0 分钟前
    有没有大佬解释下原因
    arloor
        3
    arloor  
       16 小时 51 分钟前
    @kyonn vendored 这个 feature 一般是把 openssl 的源码包含了就来,然后在 build.rs 中编译成动态/静态库,最后和你的项目进行链接。可以认为 vendored 这个 feature ,节省了你处理库文件的依赖的时间,但是增加了编译的时间。
    w568w
        4
    w568w  
       16 小时 45 分钟前
    跨平台的话用 rustls 更好,完全不会产生外部依赖,根证书都是打包进应用的。
    kyonn
        5
    kyonn  
    OP
       16 小时 13 分钟前 via Android
    @arloor 默认 openssl 的 rust 代码是不编译 openssl ,直接调用系统的库,做了一层 wrapper ,可以这么理解吗?

    vendor 这个特性应该是 openssl 的 rust 库自己实现的吧?是个普遍的特性吗(是不是大部分 c 库 wrapper 都有)?
    kyonn
        6
    kyonn  
    OP
       16 小时 12 分钟前 via Android
    @w568w 依赖库不支持 rustls ,没办法。
    daimaosix
        7
    daimaosix  
       14 小时 33 分钟前
    openssl = { version = "0.10", features = ["vendored"] }

    用 cross 构建
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:43 · PVG 10:43 · LAX 18:43 · JFK 21:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.