此问题与此相关:"bad codegen, pointer diff" linker error with Xcode 4和"bad codegen, pointer diff in boost" error in 32-bit build以及XCode 3.2.6 and 4 linker errors ld:bad codegen, pointer diff in ... to global weak symbol
我目前正在将我的所有项目升级到Xcode4,并且我遇到了一些奇怪的问题.-如果我构建通用二进制文件或32位版本,则只会出现上述错误。如果我只坚持64位,事情就好了。我自己正在构建一个自定义静态库,现在我不在该代码中使用任何可见性设置(即属性((visibility(“default”))))。如果我链接该库并尝试构建项目,则确切的错误是:
ld:错误的codegen,指针差异在Motor :: Core :: DefaultStoragePolicy :: DefaultStoragePolicy(myWindowContent * const&)到全局弱符号Motor :: Core :: NullPointerException :: ~NullPointerException()for architecture i386
它位于我的SmartPtr类中,它可以抛出NullPointerException(只是从std :: exception派生)。如果我明确地将NullPointerException类的可见性设置为隐藏,那么事情编译正常,但隐藏异常可能不是很好!我尝试了以下编译器:GCC 4.2,LLVM-GCC 4.2和LLVM 2.1都存在同样的问题。在项目/目标设置中将默认隐藏的符号设置为是不起作用(也不是我想要的)。那么如何在不隐藏异常的情况下解决这个问题(这是无稽之谈)。我必须忍受它,它是一个错误吗?期待你的想法,谢谢!
答案 0 :(得分:6)
好的,我发现错误,我在应用程序中将内联方法隐藏设置为是,而在构建静态库时将其设置为no。因此,如果您遇到同样的问题,请确保将内嵌方法隐藏设置为否。现在我的代码也可以使用默认设置的符号设置为no,这就是我想要的!
对我来说,为什么错误只出现在32位版本中,这仍然是一个谜。