如何将 openssl-sys 箱静态链接到共享库?

2024-03-22

我正在使用一个依赖于的库openssl 系统 https://github.com/sfackler/rust-openssl。根据文档,如果我指定OPENSSL_STATIC=1作为环境变量,OpenSSL 将静态链接到共享库输出中。

Due to 一系列复杂的问题 https://stackoverflow.com/q/49262694/128967,我需要将 OpenSSL 静态链接到我的共享库输出中。

这是我的Cargo.toml:

[package]
name = "api"
version = "0.1.0"
authors = ["Naftuli Kay <[email protected] /cdn-cgi/l/email-protection>"]
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"]

这是我的lib.rs:

#[link(name="openssl", kind="static")]
extern crate openssl_sys;

当我看着我的liblambda.so产生了,我仍然看到它与libssl:

[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)

我似乎已经用我知道如何静态链接的各种方式告诉了它libssl进入共享库输出。

我缺少什么?


检查build.rs在 openssl-sys 提供的文件中,我注意到两件事。

  1. 如果您没有同时设置两者OPENSSL_LIB_DIR and OPENSSL_INCLUDE_DIR,然后它将尝试通过调用 pkg-config 来检测 OpenSSL 目录。如果成功(在我的系统中确实如此),那么它将提前退出,甚至不会考虑OPENSSL_STATIC.

    可以说这是一个错误,但我发现如果我使用这个命令行:

    OPENSSL_STATIC=1 OPENSSL_LIB_DIR=/usr/lib64 OPENSSL_INCLUDE_DIR=/usr/include/openssl cargo build
    

    然后它将执行静态链接。

  2. 在我的Centos 7系统上,安装不够openssl-devel。静态库包含在openssl-static包裹。

即使在这一切之后,它也没有成功构建 - 有很多未定义的符号引用。在评论中build.rs它指出编译 OpenSSL 时使用的编译选项可能会影响哪些 API 组件可用 - 我认为这是链接失败的原因。显然,从 OpenSSL 1.1.0 开始,这不是一个问题(我的系统有 1.0.2)。

我的建议是从源代码编译 OpenSSL 1.1.0 并链接到它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 openssl-sys 箱静态链接到共享库? 的相关文章

随机推荐

  • 删除 Ruby 中的换行符

    我在删除时遇到问题 n and r标签 当我使用双引号时 它工作正常 否则它会离开 With gsub 如果没有双引号 它根本不起作用 为什么 Remove n delete n result Remove Remove n delete
  • 调用 MVC4 Razor DisplayTemplate,生成 HTML,但未渲染到浏览器

    我有一个迭代集合并调用的视图DisplayFor 对于集合中的每个元素 我需要手动迭代 而不是将集合传递给 DisplayFor 以便告诉模板是否应该在列表中绘制中断 列表中的项目只有两种类型 按它们排序 因此我只需要显示此中断一次 我的模
  • 具有高级混合索引的 Numpy 子数组分配

    原问题 当我尝试分配数组的某些元素时 我收到一条非常奇怪的错误消息 我使用切片和一组索引的组合 请参阅以下简单示例 import scipy as sp a sp zeros 3 4 5 b sp ones 4 5 I sp array 0
  • 本地主机和带有 Auth0 的 CORS 不允许我登录

    我正在制作一个 React 应用程序并尝试使用 Auth0 进行身份验证 尝试登录后 它返回 XMLHttpRequest 无法加载https my domain auth0 com 用户名密码 登录 https my domain aut
  • 了解 matplotlib:plt、figure、ax(arr)?

    我并不是很陌生matplotlib我非常羞愧地承认我一直使用它作为尽可能快速 轻松地获得解决方案的工具 所以我知道如何获得基本的情节 子情节和东西 并且有相当多的代码可以不时地重用 但我没有 深入的 呃 知识 matplotlib 最近我想
  • R 中的 Reduce() 对相似变量名导致错误

    我有 19 个由 lapply 和 split 操作生成的嵌套列表 这些列表的形式如下 list1 Var col1 col2 col3 A 2 3 4 B 3 4 5 list2 Var col1 col2 col3 A 5 6 7 B
  • MYSQL 选择一列中的两个值

    我需要从 mysql 表中选择一行 该表中有两行具有相同的值 TABLE articleId keywordId 现在我需要选择一篇文章 其关键字 Id 1 以及关键字 Id 12 每个关键字的链接都有自己的记录 如何执行一个选择查询来知道
  • tomcat 7.0.42 上的 403 访问被拒绝

    我有错误tomcat 7 0 42 上的 403 访问被拒绝访问 Tomcat Manager 应用程序时 这就是我所拥有的tomcat 用户 xml文件 我曾多次尝试更换角色 但没有成功 注意 我从 NetBeans 7 3 1 启动 停
  • 获取 icloud Web 服务端点以获取数据

    我的问题可能看起来很愚蠢 但我在谷歌上进行了太多搜索后才问这个问题 但没有任何线索 我正在使用 iCloud 网络服务 为此 我已将此 Python 代码转换为 PHP https github com picklepete pyiclou
  • ASP.NET Identity 的 IUserSecurityStampStore 接口是什么?

    查看 ASP NET Identity ASP NET 中的新成员身份实现 我在实现自己的接口时遇到了这个接口UserStore Microsoft AspNet Identity Core dll namespace Microsoft
  • 检查 bash 中的索引数组是稀疏还是密集

    我在 bash 中有一个动态生成的索引数组 想知道它是否是sparse or dense 如果在最后一个条目之前有未设置的索引 则数组是稀疏的 否则数组是密集的 该检查应该在每种情况下都有效 即使是空数组 非常大的数组 扩展时超过 ARG
  • 如何聚焦未停靠的 Chrome 调试窗口的相应选项卡?

    在开发时 我经常在 Chrome 浏览器中打开很多选项卡 我总是在单独的窗口中使用未固定的 Chrome DevTools 假设我已经打开给定选项卡的 DevTools 然后在另一个选项卡中对 SO 进行了一些搜索 那么 如果我再次聚焦 C
  • 我可以解析外部网页的目录列表吗?

    是否可以解析外部网页的目录列表 因为该网页是可访问的 并且当我访问它时它会显示文件列表 我只想知道是否可以在 PHP 中动态解析文件以及如何解析 谢谢 抱歉不清楚 我的意思是目录列表 例如 http www ibiblio org pub
  • JComboBox 弹出菜单不出现

    我在 JPanel 中有一个 JComboBox 它本身嵌套在其他几个 JPanel 中 它填充了枚举的成员 我遇到了一个问题 当我单击展开按钮时 弹出菜单不会出现 以下是我迄今为止收集到的信息 1 第一次点击展开按钮没有任何反应 第二次单
  • LINQ 基于 IList 从 IList 中删除某些元素 [重复]

    这个问题在这里已经有答案了 如何使用 LINQ 从一个基于另一个 IList 的 IList 中删除某些元素 我需要从 list1 中删除 ID 出现在 list2 中的记录 下面是代码示例 class DTO Prop int ID Pr
  • 如何在 Windows 10 Universal 中获取设备的唯一标识符?

    这是我为 Windows Universal 8 1 获取唯一 DeviceID 的旧实现 但 HardwareIdentification 类型不再存在 private static string GetId var token Hard
  • 如何在android应用程序中从twitter获取用户信息?

    我正在将 Twitter 集成到我的 Android 应用程序中 我可以为用户授权该应用程序 现在 我正在寻找一个 API 它可以为我提供登录用户的信息 如名字 姓氏 电子邮件等 我已经为 Facebook 做了这个 facebook re
  • Java中如何查找未关闭的I/O资源?

    Java 中的许多 I O 资源 例如 InputStream 和 OutputStream 在使用完毕后需要关闭 如前所述here http www coderanch com t 202922 Performance java Uncl
  • Matlab中如何imwarp转点?

    我正在使用 Matlab 将图像转换为目标图像 我有几何变换 tform 例如这是我的 tform 1 0235 0 0022 0 0607 0 0 0276 1 0002 0 0089 0 0 0170 0 0141 1 1685 0 1
  • 如何将 openssl-sys 箱静态链接到共享库?

    我正在使用一个依赖于的库openssl 系统 https github com sfackler rust openssl 根据文档 如果我指定OPENSSL STATIC 1作为环境变量 OpenSSL 将静态链接到共享库输出中 Due