我目前有一個非常大的代碼庫的單個Xcode項目,我將其稱爲項目X,我將其分成一堆子項目(項目A ,B,C)。鏈接靜態庫,共享另一個靜態庫
到目前爲止,這些項目中的每一個都自行編譯就好了。他們都產生靜態庫。 項目B和項目C依賴於生成的靜態庫項目A爲了構建。
我有另外一個xcode項目,項目ž,需要通過項目B和C產生的靜態庫。這就是問題所在。當項目Z進入鏈接器階段時,事情就會爆炸 - 對於項目B和C,它們原先鏈接的代碼在項目A中找到重複的符號!
我是很新,靜態庫的世界,我不能確定如何與項目ž前進,或如何修改其他項目,使他們鏈接對同一A計劃 lib。我有一種感覺,這是不可能的。我在這裏有什麼選擇?
編輯:
我要澄清的是項目B和項目C需要建設成單獨的靜態庫,因爲某些客戶端將只需要一個或另一個。
另外,我在OSX和iOS平臺上都遇到了這個困境。
我意識到我可以通過將項目構建爲動態庫來解決OSX上的這個問題。不過,我寧願不這樣做,它仍然讓我在iOS上遇到同樣的問題。
是的,你說得對。 我解決了這個問題,只是沒有將項目B和項目C鏈接到項目A.項目B和C仍將項目A作爲依賴項引用,因此它們能夠很好地構建。由於客戶將始終將項目A與這些項目並列在一起,因此所有符號都可以找到並且工作起來。 – Jeff 2012-08-01 19:28:19
@Jeff你是如何使A成爲「依賴」的,這樣其他人可以構建,而不是實際連接到(包括)A的構建中? – johnbakers 2016-04-30 13:39:24
@Rob我注意到,在Xcode中,如果我構建的靜態庫僅包含到另一個庫的頭,但沒有鏈接到其他庫的二進制文件,則構建完成。如果我用一個實際的程序項目(而不是一個庫)來做這件事,那麼在鏈接階段有一些未定義的定義(錯誤)。我假設當你建立一個圖書館時,「跳過」鏈接階段的這部分是正常的,而實際的程序在建立時會做額外的鏈接檢查,是嗎? (如果它被指示構建一個庫,編譯器實際上會做什麼?) – johnbakers 2016-04-30 14:38:45