2010-04-06 49 views
1

我有一個靜態庫(姑且稱之爲S)使用一個類別(從MGTwitterEngine的NSData + Base64編碼)和C庫(MiniZip由ZipArchive包裹,mm文件)。靜態庫的困境在iPhone 3.x的類別和C庫

此靜態庫用於iPhone 3.x項目(我們稱之爲A)。爲了能夠使用MiniZip庫,我將它的文件包含在項目A以及靜態庫S中。如果沒有,我會得到編譯錯誤。

項目A在模擬器上正常工作。當我在設備上運行它時,使用類別時會出現無法識別的選擇器錯誤。

正如此處指出的,似乎有一個鏈接器錯誤影響iPhone 3.x(Categories in static library for iPhone device 3.0)中的類別。解決方法是將-all_load添加到引用靜態庫的項目的其他鏈接程序標誌。

但是,如果我這樣做,那麼我是因爲我包含在項目A的MiniZip庫

一種解決方法是包括在項目中的類文件,以及得到重複的符號錯誤。如果我這樣做,項目A在設備中運行良好,但由於重複的符號錯誤而無法在模擬器上構建。

我應該如何設置一個項目,使其在模擬器上與相同配置的設備?

回答

2

相反的-all_load你可以嘗試使用-ObjC應使連接器意識到Objective-C的類別,而無需加載所有符號(在某些情況下,這對我的作品,而在其他事實並非如此)。

另一種解決辦法是不包括MiniZip庫到您的項目(A),但只有頭文件(這是正確編譯項目唯一需要的文件)。鏈接器將使用鏈接到靜態庫的MiniZip庫。

+0

謝謝!我以前使用過-ObjC,它不起作用。據我所知,這是iPhone 3.x鏈接器中的錯誤。 -ObjC不足以使鏈接器知道所有類別。關於第二個解決辦法,如果我不包括在項目中的MiniZip執行文件,我得到錯誤未找到符號「_OBJC_CLASS _ $ _ ZipArchive」。 ZipArchive是mm包裝器。但是,如果我只包含ZipArchive.mm和頭文件,它既可以在模擬器上運行,也可以在設備上運行。我會多等一會兒,看看別人是否有更簡單的解決方案,如果沒有,我會選擇你的答案。 – hpique 2010-04-06 20:38:22

+0

謝謝,我不知道這個錯誤,這使事情更清楚一點對我來說太。 – Alfonso 2010-04-06 21:27:05