M2Crypto 安装后运行失败(OPENSSL_sk_num)

本文记录了解决M2Crypto模块安装后无法正常使用的问题。原因是M2Crypto链接了旧版的libssl.so.1.0.0,导致缺失必要组件。通过升级openssl并指定版本构建M2Crypto模块,最终解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇见了一个模块安装后无法正确使用的问题,知道问题在哪,但还是花了一整天的时间来解决它。
模块还是上周安装的 M2Crypto , M2Crypto是python下直接调用 openssl 的 加密解密模块。

报错内容如下:
crypto_error
查找资料了解到 这是由于 M2Crypto 安装时 链接的是ubuntu系统自带的 libssl.so.1.0.0
这里写图片描述
libssl.1.0.0 版本比较落后缺少一些 m2crypto 需要的组件。
解决办法是,升级自己的 openssl 版本,然后使用新版本的 openssl 来构建 M2Crypto 模块 。
安装或升级 openssl 的方法:github源码安装
安装后进入解压的 openssl 文件中可以看到一个 libssl.so.1.1 文件(取决于安装的版本,这里只是看一下)
接下来就是按照官方文档写的方式安装模块了,这里不可以使用pip安装,因为pip安装默认的是使用linux自带的so文件。
M2Crypto官方git文档
主要看linux这一段:
这里写图片描述
确保依赖环境安装好后,一步一步构建安装,在 build 时加入所使用的openssl说明,例如我的就是:
python setup.py build –openssl=/usr/local
在这一步会生成许多信息,可以用 ldd 来查看某一步构建依赖的包看是否正确。
我们可以来测试一下:
原始方式:
这里写图片描述
原始方式引用的openssl libssl 文件:
这里写图片描述

运行 python setup.py clean 清除一下 bulid 的文件

引用新版本openssl方式:
这里写图片描述
引用的新版本openssl libssl 文件:
这里写图片描述

然后安装 ,按装完后可以使用 python setup.py test 测试一下!

### 如何设置 `OPENSSL_ROOT_DIR` 环境变量 为了正确配置 OpenSSl 的路径并解决 CMake 找不到 OpenSSL 庉的问题,可以通过设置环境变量 `OPENSSL_ROOT_DIR` 来指定 OpenSSL 安装的根目录位置。以下是具体方法: #### 设置 `OPENSSL_ROOT_DIR` 在 UNIX 类系统中,可以使用以下命令来设置 `OPENSSL_ROOT_DIR` 环境变量: ```bash export OPENSSL_ROOT_DIR="/path/to/openssl" ``` 其中 `/path/to/openssl` 是 OpenSSL 软件包的实际安装路径。 如果是在 Windows 上,则可以在命令行中运行以下命令: ```cmd set OPENSSL_ROOT_DIR=C:\path\to\openssl ``` 完成上述操作后,CMake 将会自动查找 `${OPENSSL_ROOT_DIR}/include` 和 `${OPENSSL_ROOT_DIR}/lib` 中的内容以定位头文件和库文件[^5]。 #### 验证 OpenSSL 版本及其路径 在设置好 `OPENSSL_ROOT_DIR` 后,建议验证当前系统的 OpenSSL 是否可用以及其版本号是否满足需求。可执行以下命令确认: ```bash which openssl openssl version ``` 这些命令可以帮助确认 OpenSSL 的绝对路径及版本信息[^2]。 #### 使用 pkg-config 查找 OpenSSL 某些情况下,即使设置了 `OPENSSL_ROOT_DIR`,仍然可能遇到问题。此时可以尝试通过 `pkg-config` 工具进一步辅助定位 OpenSSL依赖项。确保已正确设置 `PKG_CONFIG_PATH` 环境变量以便于工具能够扫描到自定义路径下的 `.pc` 文件: ```bash export PKG_CONFIG_PATH=/custom/path/to/pkgconfig:$PKG_CONFIG_PATH ``` 此方式特别适用于多库共存的情况,能有效减少冲突风险[^3]。 #### 解决符号未找到的问题 当因 OpenSSL 版本差异引发链接失败时(即所需 symbol 在目标库中不存在),需重新编译对应版本的 OpenSSL 并替换旧版库文件。例如,在案例描述里提到将 OpenSSL 升级至 1.0.1f 同时清理掉先前残留的相关动态或静态库后再做一次完整的构建流程即可消除此类隐患[^4]。 最后附上一段用于测试的小型 C++ 示例程序片段展示如何加载 SSL 功能模块: ```cpp #include <iostream> #include <openssl/ssl.h> int main() { std::cout << "OpenSSL Version: " << SSLeay_version(SSLEAY_VERSION) << std::endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值