构建OpenSSL以编译可移植版本的Python

1 投票
3 回答
2350 浏览
提问于 2025-04-16 11:00

我正在尝试从源代码构建Python,并且需要包含SSL模块,这样我的网页抓取工具才能正常工作。

我遇到了找不到SSL的问题,所以我下载并从源代码构建了OpenSSL。问题是,我需要和OpenSSL一起安装开发库,这样Python在运行-lssl参数时才能正确执行make命令。我找不到关于如何在构建OpenSSL时包含开发库的文档,尽管我相信这一定是我遗漏了什么简单的东西。

我必须从源代码构建,不能使用包管理工具。我有我的理由。

编辑:我更改了一些Python的配置设置来尝试解决这个问题,现在我遇到的编译错误是:

gcc -pthread -Xlinker -export-dynamic -o python \ Modules/python.o \ libpython2.7.a -lpthread -ldl -lutil -L/home/[username]/openssl-src -lssl -lcrypto -lm
libpython2.7.a(posixmodule.o)(.text+0x4016): 在函数 posix_tmpnam':<br /> ./Modules/posixmodule.c:7346: 警告: 使用tmpnam_r' 是危险的,最好使用 mkstemp' libpython2.7.a(posixmodule.o)(.text+0x3f76): 在函数posix_tempnam': ./Modules/posixmodule.c:7301: 警告: 使用 tempnam' 是危险的,最好使用mkstemp'
./python: 加载共享库时出错: libssl.so.1.0.0: 无法打开共享对象文件: 没有那个文件或目录
make: * [sharedmods] 错误 127

这个“没有那个文件或目录”的错误是因为它在寻找一个实际上存在于/home/[username]/openssl-src目录中的文件。

3 个回答

1

在Bourne shell(也就是/bin/sh或者/bin/bash)中:

$ LD_LIBRARY_PATH=/usr/local/lib
$ export LD_LIBRARY_PATH
$ make

在C-shell(也就是/bin/csh或者/bin/tcsh)中:

% setenv LD_LIBRARY_PATH /usr/local/lib
% make
1

默认情况下,OpenSSL的安装应该会通过 make install 来安装合适的头文件和库,只要你在配置脚本时提供正确的前缀就可以了(比如,使用 ./configure --prefix=/usr)。

如果这个过程失败了,请把gcc显示的具体错误信息发出来。

顺便提一下,可以考虑使用像 buildout 这样的自动化工具来构建Python。我觉得标准的配置应该会处理SSL支持(可能还会下载和编译OpenSSL),不过我不太确定这一点。

1

这个回答虽然没有完全解决我的问题,但我还是找到了我需要知道的东西,所以我把它发在这里。我需要把它要找的SSL文件的位置改成 /usr,而不是 /usr/local。因为RedHat系统默认把所有共享库放在 /usr/lib,而不是 /usr/local/lib,所以它默认是去那个地方找的。

撰写回答