2014-12-27 48 views
2

我正在尝试构建kivy-ios并包含openssl。我也跟着上Kivy用户组以前的职位,并做了以下步骤:用OpenSsl支持构建Kivy-ios

  1. 取消注释在build-all.sh
  2. 复制Setup.dist执行build-openssl.sh行至kivy-IOS/src/python_files/Setup.dist
  3. 克隆到https://github.com/st3fan/ios-openssl
  4. 取消注释并将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 

回答

0

克隆到https://github.com/st3fan/ios-openssl
...
什么可能会导致此任何想法?

Sefan是相当尖锐的,我不会感到惊讶,如果他配置OpenSSL的选项no-ssl2

您应该打开有问题的文件(或许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项目。

我不确定为什么你没有得到一大堆未定义的符号。通常你会得到数百个未定义的符号。