2011-08-29 84 views
4

這個問題與此有關:和"bad codegen, pointer diff" linker error with Xcode 4"bad codegen, pointer diff in boost" error in 32-bit buildXCode 3.2.6 and 4 linker errors ld:bad codegen, pointer diff in ... to global weak symbolXcode4:「壞的代碼生成,指針DIFF」鏈接錯誤再次

我目前正在升級我的所有項目Xcode4,我遇到了一些weirdness.-以上只有在構建通用二進制文件或32位版本時纔會出現錯誤。如果我只堅持64位,事情工作正常。我自己構建了一個自定義靜態庫,現在我沒有在該代碼中使用任何可見性設置(即屬性((visibility(「default」))))。如果我鏈接庫,並嘗試建立項目,確切的錯誤是:

LD:糟糕的代碼生成,在汽車::核心:: DefaultStoragePolicy :: DefaultStoragePolicy(myWindowContent * const的&)全球弱指針DIFF符號汽車::核心:: NullPointerException異常::〜NullPointerException異常()爲i386硬件架構

它坐落在我的SmartPtr類可以拋出一個NullPointerException(從標準::異常派生只)。如果我明確地將NullPointerException類的可見性設置爲隱藏,事情編譯正常,但隱藏一個異常不會很好!我嘗試了以下編譯器:GCC 4.2,LLVM-GCC 4.2和LLVM 2.1都有相同的問題。設置符號默認隱藏在他的項目/目標設置沒有工作(也不是我想要的)。所以我怎麼能解決這個問題,而不隱藏我的例外(這是無稽之談)。我必須忍受它,它是一個錯誤嗎?期待你的想法,謝謝!

回答

6

好吧,我發現了錯誤,我有聯方法隱藏設置爲在我的應用程序,而這是建立建設我的靜態庫時沒有。所以如果遇到同樣的問題,請確保您有隱藏方法隱藏設置爲。現在我的代碼也可以將符號隱藏默認設置爲否,這是我想要的!

對我來說,這仍然是一個謎,爲什麼錯誤只顯示在32位版本。