我正在尝试构建kivy-ios并包含openssl。我按照Kivy用户组的上一篇文章进行了操作,并执行了以下步骤:
我尝试将已经构建的库克隆到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
答案 0 :(得分:0)
克隆到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(OPENSSL_VERSION_NUMBER
值0x10001000L
)添加了TLS 1.1和TLS 1.2。
#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项目。
我不知道为什么你没有得到一大堆未定义的符号。通常你会得到数百个未定义的符号。