使用 OpenSsl 支持构建 Kivy-ios
Posted
技术标签:
【中文标题】使用 OpenSsl 支持构建 Kivy-ios【英文标题】:Building Kivy-ios with OpenSsl support 【发布时间】:2015-02-24 04:18:32 【问题描述】:我正在尝试构建 kivy-ios 并包含 openssl。我按照之前 Kivy 用户群的帖子,做了以下步骤:
-
取消注释 build-all.sh 中执行 build-openssl.sh 的行
将 Setup.dist 复制到 kivy-ios/src/python_files/Setup.dist
克隆到https://github.com/st3fan/ios-openssl
取消注释并将 SSL 变量更改为 pint 到正确的位置。
我尝试使用克隆到 ios-openssl 中已经构建的库。但是当我尝试构建 kivy-ios 时,我收到一个关于“_SSLv2_method”的链接错误。关于可能导致这种情况的任何想法?任何帮助表示赞赏。
Undefined symbols for architecture x86_64:
"_SSLv2_method", referenced from:
_PySSL_sslwrap in libpython2.7.a(_ssl.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [python.exe] Error 1
【问题讨论】:
【参考方案1】:克隆到https://github.com/st3fan/ios-openssl ... 知道是什么原因造成的吗?
Sefan 非常敏锐,如果他使用选项 no-ssl2
配置 OpenSSL,我不会感到惊讶。
您应该打开有问题的文件(可能是PySSL_sslwrap.c
)并像这样包装有问题的代码:
const SSL_CTX* context = NULL;
...
#ifndef OPENSSL_NO_SSL2
/* Some code to select SSLv2 only */
context = SSL_CTX_new(SSLv2_method());
#endif
违规文件(如PySSL_sslwrap.c
)还应包含<openssl/opensslconf.h>
,以确保它们正确获取配置。
由于 POODLE,您可能还需要为各种 SSLv3_method
这样做。 intetest 的定义是OPENSSL_NO_SSL3
。
这是一个修改后的 SSLscan 示例,如果 SSLv2 和 SSLv3 不存在,它会在它们周围跳舞:Modified SSLscan。
它还检测是否存在 TLS 1.1 和 TLS 1.2 以及以下内容。在 OpenSSL 1.0.1 中添加了 TLS 1.1 和 TLS 1.2(OPENSSL_VERSION_NUMBER
值 0x10001000L
)。
#if !(OPENSSL_VERSION_NUMBER >= 0x10001000L)
# define SSLSCAN_NO_TLS1_1
# define SSLSCAN_NO_TLS1_2
#endif
/* OpenSSL was config'd with 'no-ssl2' */
#ifdef OPENSSL_NO_SSL2
# define SSLSCAN_NO_SSL2
#endif
/* OpenSSL was config'd with 'no-ssl3' */
#ifdef OPENSSL_NO_SSL3
# define SSLSCAN_NO_SSL3
#endif
知道是什么原因造成的吗?
最后的“任何想法”是确保您链接到 OpenSSL 库(-lssl -lcrypto
,按 顺序)。我很确定你是。如果你不是,你会得到一大堆未定义的符号,而不仅仅是那个。
编辑:这很明显(现在)...
架构 x86_64 的未定义符号:
您的项目是为 x86_64 而非 iOS 构建的。我猜你是在 Xcode 中创建了一个 OS X 项目,而不是 iOS 项目。
不过,我不确定您为什么没有得到大量未定义的符号。通常你会得到数百个未定义的符号。
【讨论】:
以上是关于使用 OpenSsl 支持构建 Kivy-ios的主要内容,如果未能解决你的问题,请参考以下文章
在具有 OpenSSL 支持的 Windows 上构建 PyQt5?
使用 BJam 使用 openssl 构建 libtorrent
sh RPM使用静态OpenSSL 1.1在CentOS 6/7上使用ALPN构建Nginx 1.11.x(在Chrome中支持http / 2支持需要1.02+)