当前位置: 首页 > 面试题库 >

如何使用自定义OpenSSL编译Python 3.4?

凌博实
2023-03-14
问题内容

我在非标准位置安装了自己的OpenSSL(/my/path出于本示例的目的),并且我希望针对源代码编译Python
3.4时可以以此为基础进行构建。我试过的是这个(目录缩写)

CPPFLAGS="-I/my/path/include -I/my/path/include/openssl" ./configure --prefix=/my/path/

我也尝试了用C_INCLUDE_PATH冒号分隔的路径。

然后,我运行make并得到以下信息:

building '_ssl' extension
gcc -pthread -fPIC -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I./Include -I. -IInclude -I/my/path/include -I/my/path/include/openssl -I/usr/local/include -I/my/path/Python-3.4.0/Include -I/my/path/Python-3.4.0 -c /my/path/Python-3.4.0/Modules/_ssl.c -o build/temp.linux-x86_64-3.4/my/path/Python-3.4.0/Modules/_ssl.o
gcc -pthread -shared build/temp.linux-x86_64-3.4/my/path/Python-3.4.0/Modules/_ssl.o -L/my/path/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-3.4/_ssl.cpython-34m.so
*** WARNING: renaming "_ssl" since importing it failed: build/lib.linux-x86_64-3.4/_ssl.cpython-34m.so: undefined symbol: SSL_get0_next_proto_negotiated

它正在寻找SSL_get0_next_proto_negotiated,但是最确定的是:

$ grep SSL_get0_next_proto_negotiated /my/path/include/openssl/*
/my/path/include/openssl/ssl.h:void SSL_get0_next_proto_negotiated(const SSL *s,

我不确定自己在做什么错,有什么想法吗?


问题答案:

经过大量的梳理,我设法弄清楚了。这是一堆环境变量…我想我可能做得有些过分,但这基本上可以解决问题:

# OpenSSL 1.0.1g
./config shared --prefix=/my/path --openssldir=/my/path/openssl
make
make install

# Python 3.4
export LDFLAGS="-L/my/path/lib/ -L/my/path/lib64/"
export LD_LIBRARY_PATH="/my/path/lib/:/my/path/lib64/"
export CPPFLAGS="-I/my/path/include -I/my/path/include/openssl"
./configure --prefix=/my/path/
make
make install


 类似资料:
  • 问题内容: 我正在尝试编译一个包含以下内容的小.c文件: 在我拥有.c文件的同一文件夹中,我拥有带有所有这些文件(以及更多文件)的/ openssl,也在突触包管理器中,我看到安装了OpenSSL,我正在尝试使用以下方法进行编译: 但我总是得到错误: 我要编译的文件只是一个.c文件,没有Makefile或./configure。 我已经尝试过: 并尝试再次编译,但我得到相同的错误。 我应该怎么做才

  • 问题内容: 我的代码基于@zzzeeek对这个问题的回答。我对其进行了扩展,因此考虑了PostgreSQL的NULL和ARRAY。 一切工作正常,直到结果证明我无法在此VALUES子句中插入带有“%”符号的值-它们插入到结果语句中,这似乎导致绑定问题 我想如果不是我们使用的话,我们可以避免这样的错误。但是下面的所有内容都应该返回纯文本,对吗?我如何修改它以获得基于参数的查询? 问题答案: 我知道了

  • 问题内容: 是否可以为javac(或某些替代的Java编译器)指定自定义类加载器? 我很喜欢这种壮举,因为它可以让我编译使用仅由我的特殊类加载器找到的类的类。 对于那些好奇的人:我将编写一个连接数据库的classloder,并根据找到的表创建类。 问题答案: 运行javac时,您可以像这样指定类加载器:

  • 所以,我已经通过Chocolate安装了Bazel,安装了Python 3.5和2.7,安装了CUDA v8和cuDNN v6,安装了JDK 8.0,我现在正在尝试在我的Windows 10设备上定制TensorFlow,使用AVX、AVX 2和CUDA。TensorFlow GPU,预构建版本,确实可以工作,我已经测试并成功运行了它。 我遵循了其他文章的说明,包括在TensorFlow的实际站点

  • 问题内容: 我正在尝试在Go中创建和使用自定义包。这可能很明显,但是我找不到很多信息。基本上,我在同一个文件夹中拥有这两个文件: mylib.go main.go 当我尝试时,出现此错误: 我尝试先运行,但似乎没有做任何事(没有生成文件,没有错误消息)。所以有什么想法我该怎么做? 问题答案: 首先,请务必阅读并理解“如何编写Go代码”文档。 实际答案取决于您“定制包装”的性质。 如果打算用于一般用

  • 我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到有关此的太多信息。基本上,我在同一个文件夹中有这两个文件: mylib。去 主要的去 当我尝试时,我得到这个错误: 我试着运行,但它似乎什么都没做(没有生成文件,没有错误消息)。你知道我该怎么做吗?