2013-01-07 67 views
1

我已經創建了兩個iOS的.frameworks與依賴的iOS框架

他們都編譯完美

我的結構如下:

iPadProject 
    - framework1 
    - framework2 

所以Framework2包含在框架1和框架1包括在實際的iPad項目

所以我的問題是,如果我同時添加框架1和framework2到我iPadProject它不能編譯,因爲它的牢騷阿布從framework2複製符號(這是合乎邏輯的,因爲它已經包含在framework1中)

但是,如果我只包括framework1到我的iPadProject中,當我從framework1訪問一個方法時,輪到從framework2訪問一個方法,它崩潰了應用程序「信號SIGABRT」

回答

1

不嵌套靜態庫,包括iOS框架。正如你所看到的,它會導致重大問題(當兩個框架各自擁有自己的第三個版本時,會導致更多的問題)。最後的鏈接步驟應鏈接所有需要的庫;靜態庫不應該鏈接其他靜態庫。沒有真正好的方法來自動化這個;它只是該框架文檔的一部分。

你不應該獲得運行時異常,雖然未能鏈接的框架。您應該獲取鏈接時間失敗,指示該符號未定義。如果你發生崩潰,這表明你在鏈接中做了一些奇怪的事情。

+0

@rob您好,我應該如何爲我的架構怎麼做,如果我試圖在我的主機應用程序和主機應用程序的框架內使用的框架? –

+0

我不理解評論。您可能希望將您問題的具體示例組合成一個新問題。 –

1

的問題是,因爲它是現在嵌套,鏈接器鏈接到F2 F1 - 但是,這是由F1只需要f2的部分。

F2具有5個符號(f2_1 - 5)
F1使用f2_1和f2_2但不是3,4,5-
=>接頭拋出它扔掉

現在該應用需要f2_3 ,f2_4和f2_5,但它們不在那裏......但在編譯時沒有人知道。


現在試圖通過應用具有f再次連接,但因爲沒人以前在編譯時間來解決它的鏈接優化了f2_3 - 5,他們被認爲是F1中,因此是重複的!


解決這個Rob Napier已經提到的方法。 不要窩框架(主要不是靜態的/第3部分的)

一種解決方法是通過-all_load給連接器當f1鏈接在F2!