【发布时间】:2011-08-29 09:26:00
【问题描述】:
这个问题与此相关:"bad codegen, pointer diff" linker error with Xcode 4 and "bad codegen, pointer diff in boost" error in 32-bit build and XCode 3.2.6 and 4 linker errors ld:bad codegen, pointer diff in ... to global weak symbol
我目前正在将我所有的项目升级到 Xcode4 并且我遇到了一些奇怪的问题。- 只有在我构建通用二进制文件或 32 位版本时才会出现上述错误。如果我只坚持 64 位,一切正常。我自己正在构建一个自定义静态库,现在我没有在该代码中使用任何可见性设置(即 attribute ((visibility ("default"))))。如果我链接该库并尝试构建项目,则确切的错误是:
ld:错误的代码生成,Motor::Core::DefaultStoragePolicy::DefaultStoragePolicy(myWindowContent* const&) 中的指针差异指向架构 i386 的全局弱符号 Motor::Core::NullPointerException::~NullPointerException()
它位于我的 SmartPtr 类中,该类可以抛出 NullPointerException(仅派生自 std::exception)。如果我将 NullPointerException 类的可见性显式设置为隐藏,则可以正常编译,但隐藏异常就不好了!我尝试了以下编译器:GCC 4.2、LLVM-GCC 4.2 和 LLVM 2.1 都有同样的问题。在项目/目标设置中将 Symbols Hidden By Default 设置为 yes 不起作用(也不是我想要的)。那么如何在不隐藏异常的情况下解决这个问题(这是无稽之谈)。我必须忍受它,这是一个错误吗?期待你的想法,谢谢!
【问题讨论】: