2013-06-24 59 views
6

我有一個正在Xcode動態庫目標中引用的符號,但它沒有在那裏定義。我需要這個符號是未定義的。這是因爲它將在包含它的每個進程中以不同的方式編譯(基於一些編譯時間定義)。忽略Xcode動態庫中未定義的符號

Xcode中的動態庫目標無法鏈接,因爲它包含對此符號的引用(這並非意外),但我知道符號在運行時可用。我將把這個函數編譯到公共庫鏈接到的每個目標中。

我想讓連接器在運行時標記這個特殊的符號進行動態查找。

如果我在我的Xcode項目中指定「-undefined dynamic_lookup」作爲「其他鏈接器標誌」之一,我已經能夠獲得它的鏈接。問題是我不想走那麼遠。我知道只有1個符號應該是未定義的。如果剩下的符號未定義,我希望所有剩下的符號都會產生錯誤(我想避免運行時基本上缺少符號錯誤)。

我發現,好像它應該做的,我需要什麼(在從LD男子頁)LD鏈接器選項:

-U symbol_name 
      Specified that it is ok for symbol_name to have no definition. With -two_levelnamespace, the resulting symbol will be marked dynamic_lookup which means dyld will search all loaded images. 

不過,我似乎無法得到它的工作。每當我在「其它鏈接器標記」我還在迎接這個連接錯誤指定「-U符號名稱」或「-UsymbolName」:

Undefined symbols for architecture x86_64: 
    "_symbolName", referenced from: <various object files> 

我使用-U錯誤吧?這不是我需要的選項嗎,還是它不能像預計的那樣工作?

+0

不是'--unresolved-symbols = ignore-all'對你有用嗎? – devnull

+1

@devnull我沒有這樣做,但是我從「-undefined dynamic_lookup」中獲得了相同的行爲(忽略所有已解析的符號)。問題是,今後我不希望忽略所有未定義的符號。我只想要一個被忽略。我不想忽視所有這些,只是忽略了這一點。 –

+0

我可能是錯的,但不應該指定'-U _symbolName'? –

回答