构建OpenSSL以编译可移植版本的Python
我正在尝试从源代码构建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 个回答
在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
默认情况下,OpenSSL的安装应该会通过 make install
来安装合适的头文件和库,只要你在配置脚本时提供正确的前缀就可以了(比如,使用 ./configure --prefix=/usr
)。
如果这个过程失败了,请把gcc显示的具体错误信息发出来。
顺便提一下,可以考虑使用像 buildout 这样的自动化工具来构建Python。我觉得标准的配置应该会处理SSL支持(可能还会下载和编译OpenSSL),不过我不太确定这一点。
这个回答虽然没有完全解决我的问题,但我还是找到了我需要知道的东西,所以我把它发在这里。我需要把它要找的SSL文件的位置改成 /usr
,而不是 /usr/local
。因为RedHat系统默认把所有共享库放在 /usr/lib
,而不是 /usr/local/lib
,所以它默认是去那个地方找的。