【问题标题】:Xcode4: "bad codegen, pointer diff" linker error againXcode4:“错误的代码生成,指针差异”链接器再次错误
【发布时间】: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 不起作用(也不是我想要的)。那么如何在不隐藏异常的情况下解决这个问题(这是无稽之谈)。我必须忍受它,这是一个错误吗?期待你的想法,谢谢!

【问题讨论】:

    标签: c++ xcode macos linker


    【解决方案1】:

    好的,我发现了错误,我在我的应用程序中将 Inline Methods Hidden 设置为 yes,而在构建我的静态库时将它设置为 no。因此,如果您遇到同样的问题,请确保将 Inline Methods Hidden 设置为 No。现在我的代码也适用于默认隐藏的符号设置为 no,这就是我想要的!

    为什么这个错误只出现在 32 位版本中,对我来说仍然是个谜。

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 2020-08-07
      • 2017-07-23
      相关资源
      最近更新 更多