2014-01-31 18 views
8

在哪裏可以找到我們可以在Xcode中爲我們的iOS項目指定的編譯器標誌和鏈接器標誌的文檔?適用於iOS的Xcode的鏈接器標誌

我想更詳細地瞭解可能的標誌的原因是,Google Admob SDK表示我們必須設置鏈接器-Objc標誌,而Facebook SDK建議不要將它設置爲較小的二進制文件。所以,我想知道,我們可以設置Objc爲特定的圖書館(谷歌admob在這種情況下),並取消它的另一個庫(臉譜)?我希望能夠首先找到一個手冊頁或其他關於編譯器和鏈接器選項的文檔,然後放大Objc。關於如何在Xcode中設置鏈接器標誌,有大量的文檔和stackoverflow帖子等。缺少的是我們可以設置的可能的鏈接器標誌列表,以及它們各自的含義。

令人驚訝的是,google搜索引起了我的困惑,因爲在clang,llvm,llvm-gcc等等上都有東西,而LLVM site列出了許多llvm命令,但是我沒有看到-objc列在任何相應的頁面。除了編譯器和鏈接器是clang還是llvm或者它們被調用的問題之外,還有一個地方我們可以去閱讀關於默認編譯和鏈接iOS項目時Xcode當前使用的文檔嗎? (比如,如果有不同的文檔集,Xcode 4.6和Xcode 5.0.2都可以)?謝謝!

+0

看到這個答案 - http://stackoverflow.com/questions/6629979/what-does-the-objc-linker-flag-do –

+1

謝謝,我也看到了。然而,我在詢問是否有更多的一般參考資料,指出哪些鏈接標誌可用,以及它們的含義。 – auspicious99

回答

10

您可以試試man 1 ld。 特別是對於本說明書的-ObjC標誌爲:

-ObjC荷載該 實施Objective-C類或類別靜態歸檔庫的所有成員。

編輯

你對AdMob廣告SDK和Facebook的SDK的其他問題,我建議到-ObjC添加到鏈接器標誌和看看this文章這就解釋了爲什麼。基本上Facebook建議不要使用它,因爲由於將額外的目標代碼加載到二進制文件中,您的可執行文件最終會變得更大。

+2

@ auspicious99 ...同樣,clang編譯器的manpage中的「man clang」。謹慎,有一個編譯器和一個鏈接器選項'ObjC' – CouchDeveloper

+0

謝謝伊萬!由於我不希望二進制文件不必要地變大,所以我想知道是否可以像ObjC那樣只能用於Admob。 'man 1 ld'顯示''force_load path_to_archive''可能是我可以使用的。將嘗試。 – auspicious99

+0

謝謝@CouchDeveloper!感謝您指出clang有自己的'Objc'選項,它的含義與ld的不同。 – auspicious99

0

當我將一個函數放入我的.hpp文件時,我遇到了這個問題。

void logError(char const* szError) 
{ 
    ... 
} 

我不得不在內聯中添加它使其工作。

inline void logError(char const* szError) 
{ 
    ... 
} 

更好的是不要在頭文件中定義你的函數。

相關問題