How do I statically link the openssl-sys crate into a shared library?
我正在使用依赖于openssl-sys的库。根据文档,如果我将
由于一系列复杂的问题,我需要将OpenSSL静态链接到共享库输出中。
这是我的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [package] name ="api" version ="0.1.0" authors = ["Naftuli Kay <[email protected]>"] 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"] |
这是我的
1 2 | #[link(name="openssl", kind="static")] extern crate openssl_sys; |
当我查看生成的
1 2 3 4 | [vagrant@api vagrant]$ OPENSSL_STATIC=1 cargo build Finished dev [unoptimized + debuginfo] target(s) in 0.94 secs [vagrant@api vagrant]$ ldd target/debug/liblambda.so | grep -i ssl libssl.so.10 => /lib64/libssl.so.10 (0x00007faa5f5bf000) |
我似乎已经以各种方式告诉了我,我知道如何将
我想念什么?
检查openssl-sys随附的
如果未同时设置
可以说这是一个错误,但是我发现如果我使用以下命令行:
1 | OPENSSL_STATIC=1 OPENSSL_LIB_DIR=/usr/lib64 OPENSSL_INCLUDE_DIR=/usr/include/openssl cargo build |
然后它将执行静态链接。
在我的Centos 7系统上,仅安装
即使如此,它仍然无法成功构建-存在许多未定义的符号引用。在
我的建议是从源代码编译OpenSSL 1.1.0并针对该链接进行链接。