2014-12-27 126 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項目。

我不確定爲什麼你沒有得到一大堆未定義的符號。通常你會得到數百個未定義的符號。