使用OpenSsl支持构建Kivy-ios

时间:2014-12-27 03:42:21

标签: ios openssl kivy

我正在尝试构建kivy-ios并包含openssl。我按照Kivy用户组的上一篇文章进行了操作,并执行了以下步骤:

  1. 取消注释在build-all.sh
  2. 中执行build-openssl.sh的行
  3. 将Setup.dist复制到kivy-ios / src / python_files / Setup.dist
  4. 克隆到https://github.com/st3fan/ios-openssl
  5. 取消注释并将SSL变量更改为pint到正确的位置。
  6. 我尝试将已经构建的库克隆到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 个答案:

答案 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_NUMBER0x10001000L)添加了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项目。

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