该问题与以下有关:Xcode 4中出现“bad codegen, pointer diff”链接器错误,32位构建中的“bad codegen, pointer diff in boost”错误和XCode 3.2.6和4链接器错误ld:bad codegen,在...中指针差异到全局弱符号
我正在将所有项目升级到Xcode4,但是遇到了一些奇怪的问题。只有在我构建通用二进制或32位版本时才会出现上述错误。如果只使用64位,事情就能正常工作。我正在自己构建一个自定义静态库,目前我并没有在代码中使用任何可见性设置(即attribute ((visibility ("default"))))。如果我链接该库并尝试构建项目,则会出现精确的错误:
ld:bad codegen,在 Motor::Core::DefaultStoragePolicy::DefaultStoragePolicy(myWindowContent* const&)to global weak symbol Motor::Core::NullPointerException::~NullPointerException()for architecture i386
它位于我的SmartPtr类中,该类可以抛出NullPointerException(仅从std::exception派生)。如果我明确将NullPointerException类的可见性设置为隐藏,那么事情就可以编译好了,但隐藏异常是不好的!我尝试了以下编译器:GCC 4.2、LLVM-GCC 4.2和LLVM 2.1,都有同样的问题。在项目/目标设置中将Symbols Hidden By Default设置为yes没有起作用(也不是我想要的)。那么我该如何解决这个问题而不隐藏我的异常(这是无意义的)?我必须接受它吗?还请期待您的想法,谢谢!