2011-08-29 61 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位版本。