我正在寫一個框架Stuff.framework(私人使用),依賴於第三方靜態庫libthirdparty.a,但我不想嵌入庫中的框架。這個框架將被SomeApp.app使用(除其他外)。目標C框架與庫依賴,但沒有嵌入
爲了簡短,讓我們假設我們同意嵌入是不好的。
如果我正在編寫一個庫libstuff.a而不是一個框架,我不會將libstuff.a和libthirdparty.a鏈接起來。 SomeApp.app會鏈接到libstuff.a和libthirdparty.a - 沒問題。
此方法不適用於框架。如果Stuff.framework不鏈接libthirdparty.a,則鏈接器會提供「未定義符號」錯誤。如果Stuff.framework鏈接libthirdparty.a,庫的內容就嵌入在框架中,這是我想避免的。
那麼,有誰知道如何實現第一段中所述的目標?我想這是靜態和動態庫之間的區別,但也許有鏈接選項可以解決它。
你試圖要求動態綁定到一個靜態庫。那真的不會發生。靜態鏈接到框架中的庫有什麼問題?而且,鏈接和「嵌入」是不同的概念。我不確定你的意思是嵌入。 – CodaFi
如果答案是「那是不可能的」,那麼很好 - 我不會浪費我的時間。我的理解是靜態庫的代碼被複制到框架中。假設你有兩個使用相同庫的框架,並且都被應用程序使用 - 現在你在應用程序中有重複的符號。更糟糕的是,如果框架使用了不同版本的庫呢?和/或應用程序本身也使用庫?很可能,例如。如果他們都使用給定的日誌庫。 – Adrian
這是OS X,對吧?如果你發佈了一箇中間dylib,你的應用程序將動態地解析符號,這將調用dylib中的集成靜態代碼,而不必處理所有這些共享靜態庫廢話。 – CodaFi