如何将openssl sys板条箱静态链接到共享库中?
我使用的是一个图书馆,它依赖于你。根据文档,如果我指定如何将openssl sys板条箱静态链接到共享库中?,openssl,rust,rust-cargo,Openssl,Rust,Rust Cargo,我使用的是一个图书馆,它依赖于你。根据文档,如果我指定OPENSSL\u STATIC=1作为环境变量,那么OPENSSL将静态链接到共享库输出中 由于,我需要将OpenSSL静态链接到我的共享库输出中 这是我的货物。toml: [package] name = "api" version = "0.1.0" authors = ["Naftuli Kay <me@naftuli.wtf>"] publish = false [lib] name = "lambda" crate-
OPENSSL\u STATIC=1
作为环境变量,那么OPENSSL将静态链接到共享库输出中
由于,我需要将OpenSSL静态链接到我的共享库输出中
这是我的货物。toml
:
[package]
name = "api"
version = "0.1.0"
authors = ["Naftuli Kay <me@naftuli.wtf>"]
publish = false
[lib]
name = "lambda"
crate-type = ["cdylib"]
[dependencies]
chrono = { version = "0.4", features = ["serde"] }
constant_time_eq = "0.1.3"
cpython = { version = "0.1", default-features = false }
crowbar = { version = "0.2", default-features = false }
libc = "0.2.29"
lazy_static = "1.0"
log = "0.4.1"
log4rs = "0.8.0"
openssl-sys = "0.9.27"
parking_lot ="0.5.4"
rand = "0.4.2"
rusoto_core = "0.32.0"
rusoto_kms = "0.32.0"
serde = "1.0.27"
serde-aux = "0.5.2"
serde_derive = "1.0.27"
serde_json = "1.0.9"
serde_qs = "0.3.0"
tokio = "0.1.3"
tokio-reactor = "0.1.0"
[features]
default = ["cpython/python3-sys"]
当我查看我的liblambda.so
生成时,我仍然看到它与libssl
链接:
[vagrant@apivagrant]$OPENSSL_STATIC=1货物构建
在0.94秒内完成开发[未优化+调试信息]目标
[vagrant@apivagrant]$ldd target/debug/liblambda.so | grep-i ssl
libssl.so.10=>/lib64/libssl.so.10(0x00007faa5f5bf000)
我似乎已经以各种方式告诉了它,我知道如何将libssl
静态链接到共享库输出中
我遗漏了什么?检查openssl sys提供的
build.rs
文件时,我注意到两件事
OPENSSL_LIB_DIR
和OPENSSL_INCLUDE_DIR
,则它将尝试通过调用pkg config来检测OPENSSL目录。如果成功了(在我的系统中也是如此),那么它将提前退出,甚至不会考虑OPENSSL\u STATIC
的值
可以说这是一个bug,但是我发现如果我使用这个命令行:
OPENSSL\u STATIC=1 OPENSSL\u LIB\u DIR=/usr/lib64 OPENSSL\u INCLUDE\u DIR=/usr/INCLUDE/OPENSSL货物构建
然后它将执行静态链接openssl-devel
是不够的。静态库包含在opensslstatic
包中build.rs
中的注释中指出,编译OpenSSL时使用的编译选项可能会影响可用的API组件-我认为这就是链接失败的原因。显然,这在OpenSSL 1.1.0(我的系统有1.0.2)中不是一个问题
我的建议是从源代码处编译OpenSSL 1.1.0,并与之链接。您是否完成了干净的构建和重建?您的输出表明实际上没有编译,否则我们将在输出中看到“编译”。另请参见,其中包含相同的建议。@Shepmaster我已经完成了一个干净的构建。不清楚您在哪里预编译了
libssl.a
,以及您将它放在哪里?不确定像openssl dev
包这样的东西是否包含静态链接的openssl。我正在安装包含静态代码的openssl static。!我应该去看源代码。我在rust openssl上提出了这个问题。
#[link(name="openssl", kind="static")]
extern crate openssl_sys;