使用 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_NUMBER0x10001000L)。

#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+)

使用 OpenSSL 构建 LibCurl 会导致链接器错误

什么是支持TLS 1.2的libcurl的最低版本?

如何使用 Visual Studio 2017 在 Windows 上构建 OpenSSL?