2013-10-10 50 views
1

我有一個項目,它使用libcurl.all.a。它在Xcode 4.6.3上構建,鏈接和運行完美。但在Xcode5中,它會在未定義的符號上引發鏈接器錯誤。錯誤日誌如下。在Xcode5上libcurl鏈接器錯誤,但在Xcode 4.6上工作正常

Undefined symbols for architecture i386: 
    "_SSLCopyPeerCertificates", referenced from: 
     _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
    "_SSLDisposeContext", referenced from: 
     _Curl_darwinssl_close in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
     _Curl_darwinssl_shutdown in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
     _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
    "_SSLNewContext", referenced from: 
     _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
    "_SSLSetEnableCertVerify", referenced from: 
     _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
    "_SSLSetProtocolVersionEnabled", referenced from: 
     _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o) 
    ld: symbol(s) not found for architecture i386 
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 

SecurityFramework已經存在的項目,我已經設置構建有源體系僅爲No.而且由於它在Xcode 4.6.3編譯,我不認爲這有什麼關係失蹤目標成員。

有什麼辦法可以解決這個問題嗎?或者可能的解決方法,這對於使用Xcode5的庫非常重要,因爲它需要在iOS7應用程序中使用。

+0

你會檢查'lipo -info libcurl.all.a'返回什麼?在那裏的i386家族? – sergio

+0

@sergio:是的,它的存在'fat文件中的體系結構:libcurl.all.a是:i386 armv7(cputype(12)cpusubtype(11))'。 Xcode5爲標準架構armv7和armv7s構建,這可能是一個問題嗎? –

+1

您正在使用的libcurl的版本是什麼?你應該注意使用*最近*足夠的版本(即7.28.1+),因爲已經引入了與DarwinSSL相關的重要修復(例如使用僅存在於OS X上的API)。看到這[回答](http://stackoverflow.com/questions/13776322/ios-app-rejected-non-public-api-ssl-related-on-cocos2d-x-and-libcurl/13779449#13779449)更多細節。這可以解釋你的鏈接錯誤(這些協議在DarwinSSL中不存在)。 – deltheil

回答

0

因此,我發佈的答案,以便它可能會有用的人誰可能面臨類似的情況。我能夠從@deltheli和@sergio的評論中理清這個問題,非常感謝他們的幫助。

所以,我還得跑 lipo -info 知道支持的體系結構,並 發現armv7s和arm64沒有得到支持,那麼,爲什麼它完美的作品我嘗試編譯它在ARMv7的,但是失敗了,說明問題在Xcode 4.6中,而不是在5.我的libcurl過時了!而我使用的版本不支持DarwinSSL的一些符號。使用最新版本解決了我的問題。

相關問題