rust 如何处理 openssl 的依赖?

192 天前
 kyonn

为了让二进制能跑在主流发行版上, 现在用的 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, 有没有比较好的解决办法?

1581 次点击
所在节点    程序员
8 条回复
kyonn
192 天前
.... 主动添加下 openssl 依赖就解决了, cargo add openssl --features vendored
kyonn
192 天前
有没有大佬解释下原因
arloor
192 天前
@kyonn vendored 这个 feature 一般是把 openssl 的源码包含了就来,然后在 build.rs 中编译成动态/静态库,最后和你的项目进行链接。可以认为 vendored 这个 feature ,节省了你处理库文件的依赖的时间,但是增加了编译的时间。
w568w
192 天前
跨平台的话用 rustls 更好,完全不会产生外部依赖,根证书都是打包进应用的。
kyonn
192 天前
@arloor 默认 openssl 的 rust 代码是不编译 openssl ,直接调用系统的库,做了一层 wrapper ,可以这么理解吗?

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

用 cross 构建
yuezk
192 天前
@kyonn #5 也增大了 binary 的大小

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1106827

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX