2011-08-13 63 views
3

我正在爲Mac App Store準備我的應用程序,作爲其中的一部分,我放棄了Nick Paulson的NPReceipt驗證,並一直試圖讓事情順利進行。這是一個非常簡單的設置,但是從我收集的內容來看,您應該將libcrypto編譯爲應用程序作爲靜態庫,以避免通過更改動態庫的方式造成危害。在Mac App Store應用程序中遇到libcrypto/OpenSSL問題

這意味着我需要提供我自己的libcrypto.a(如果我理解正確)。我自己編譯它並將其添加到我的Xcode項目中。現在的問題是,由於某種原因,在編譯我的項目時,Xcode只是徹底忽略了項目中的libcrypto,而是跳到系統中缺少64位二進制文​​件的dylib版本,從而導致編譯失敗。

我能做些什麼來使Xcode使用庫的編譯版本?我知道這可能看起來像一個簡單的事情,但作爲一個只與蘋果圖書館合作的業餘愛好者可可程序員,這一切似乎都是陌生的。

謝謝!

回答

2

我有同樣的問題,我通過將.a文件重命名爲'libmycrypto.a',然後將其添加到項目中解決了這個問題,我從Linking to libcrypto for Leopard?得到了一個解決方案。我猜它可能也會改變圖書館的搜索路徑順序,但我不相信有一天我不會再搞砸了。

如果您查看Xcode輸出窗口中的鏈接命令,您可以看到「-lcrypto」,當您重命名並重新添加庫時,它將更改爲「-lmycrypto」。這可以防止它連接libcrypto.dylib,無論它搜索庫的順序如何。

1

我假設在這裏你正在使用的Xcode 4,但是這應該是Xcode的3

在側邊欄中選擇您的項目,並選擇您的應用程序的目標相似。轉到構建階段部分。在「Link Binary with Libraries」下,你必須確保你的.a文件在那裏 - 而不是dylib。 (同時也請記住,沒有必要把.a文件變成「複製文件」建設階段 - 因爲你會發現自己與Cocoa框架做 - 因爲靜態庫編譯到您的應用程序)

+0

謝謝你的回答!是的,我在鏈接二進制運行的Xcode 4的某文件確實與庫階段,我甚至刪除和重新添加該文件,但好像它根本不存在的編譯器仍然起作用。 –

+0

dylib文件是否也完全從項目中刪除,包括從「鏈接二進制庫」部分? – Enchilada

+0

您也可以嘗試按住Option鍵,轉至產品菜單並選擇「清理生成文件夾」,然後重新編譯。也許它仍然在將舊圖書館錄製到您的應用程序中。 – Enchilada

0

現在的問題是,由於某種原因,編譯我的項目Xcode的時候才徹底忽略了libcrypto項目,而是跳躍系統上其它地方的dylib的版本,缺乏一個64位二進制文​​件,從而導致編譯失敗。

假設您的路徑是正確的(具體來說,您通過-L提供的內容)....這是Apple和Xcode的已知問題。即使iOS無法加載非系統dylib,Xcode也會爲iOS做同樣的事情!它像蘋果工程師在沒有得到備忘錄...

user2297467給你答案。您必須重命名或將dylib移出庫目錄。

別的東西,確實在蘋果的Xcode 工作:省略-L,省略-l並指定到存檔的完整路徑(例如,/usr/local/ssl/libcrypto.a)。除蘋果以外,這一點在我所知的任何地方都可以使用

相關問題