2011-03-23 42 views
6

下面是從平時的混淆重複的符號錯誤一個不同的... :-)我如何說服Xcode發出重複的符號鏈接器錯誤?

我工作在具有相同的全局,「微量」的Xcode項目一些舊的Mac代碼,在若干規定不同的源文件 - 例如:

  • File1.c:SInt32 trace;
  • File2.c:布爾軌跡;

等等。很顯然,原作者意味着他們具有文件特定的範圍,但只是忽略了將這些行中的任何一行加上「static」。這很好,很容易修復。

但我有點震驚鏈接器不會標記這些!在我看來,Xcode的鏈接器(我假設gnu ld)只會爲鏈接到代碼段的函數發出重複的符號警告或錯誤 - 但不會鏈接到數據段中的全局變量。相反,它默默地混淆了它們,這導致了錯誤。

那麼......我該如何說服Xcode爲重複的全局變量發出鏈接錯誤?或者以其他方式獲取這些信息,這些信息可能是我構建的常規部分?

回答

2

嗯,我以爲我已經回答了我的問題... :-)

我張貼早些時候:

所以,如果你使用的Xcode與LLVM GCC 4.2 ,進入構建設置對話框,找到「LLVM GCC 4.2 - 代碼 代」部分,並選中「No Common Blocks」複選框。這使得 編譯器的「-fno-常用」選項, 並將對象文件生成 以便勞工處會窒息,如果你有 不同的源文件的兩個全局具有相同 名稱發出 錯誤。

不幸的是,這似乎並沒有解決所有情況。它似乎工作正常,如果所有的全局變量具有相同的類型。

但問題中的示例直接來自代碼,其中名爲「trace」的變量在兩個不同類型的文件中定義爲全局變量。當我檢查該複選框時,這仍然不會被構建系統捕獲。

+0

也許是項目範圍內的違規文章搜索,一旦你有一個實例? – MCannon 2011-03-23 21:51:31

+0

嗯,是的,一旦你知道有問題的變量名稱是什麼,這就是修復的一部分。問題是,你怎麼首先找到他們?鏈接器知道有名稱衝突,問題是,你如何說服它投訴? – 2011-03-23 22:13:19

+0

我暫時放棄了這個。 :-( – 2011-03-28 23:34:27