Xcode 3.2.6和4链接错误ld:bad codegen,指针差异在...到全局弱符号

3

我在使用Xcode 3.2.6和Xcode 4时遇到了一些奇怪的错误。

我的项目在Xcode 3.2.5中没有出现这些错误。

符号默认选项被设置为YES。

这些链接错误与模板类中的静态成员(指针)有关。是否有任何想法、编译器/链接器密钥需要检查,或者其他什么东西可以解决这个问题?


我也遇到了这个问题,将“默认隐藏符号”选项更改为YES也没有解决。 - BadPirate
你好。最好的解决方案是从MacPorts安装arm-elf-g++-4.5,忘记使用xCode附带的4.2编译器(以及其他噩梦)! - Alexander K.
2个回答

2
这与您编译的库中符号可见性有关。GCC 4.0开关-fvisibility=hidden旨在隐藏DSO /共享对象库中的符号,以减少链接/加载时间。然而,我看到一些在线博客在编译静态库时使用该开关的某些奇特方式。实际上,我无法找出这样做的效果或意图。据我所知,静态库需要公开符号信息以便从外部使用函数。
我遇到了与boost :: exceptions相同的链接器错误。但是,为了捕获特定类型的异常,GCC需要类型信息,但这是运行时问题。因此,即使它正确地编译/链接,如果您打算从库外捕获异常,则隐藏项目中的符号信息不是正确的解决方案。请参阅苹果公司的文档:
“如果您的符号使用运行时类型识别(RTTI)信息、异常或动态转换来处理由另一个库定义的对象发起的请求,则如果期望处理由其他库抛出的该类型异常,则必须使您的符号可见。例如,如果您为C ++标准库中的类型定义了catch处理程序,并且您想要捕获由C ++标准库抛出的该类型异常,则必须确保您的typeinfo对象是可见的。”
来源:http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html 实际上,我需要使用此处描述的宏保护修改异常头文件,以使我的项目编译和链接:http://gcc.gnu.org/wiki/Visibility。即使使用-fvisibility=default,这也是必要的,这使我相信这是某种链接器错误。
尽管如此,我在此处记录了有关Boost的错误:https://svn.boost.org/trac/boost/ticket/4594#comment:11 您可以在此处找到我的配置:http://lists.boost.org/boost-users/2011/07/69251.php

1

谢谢您的回复。我已经找到了这个答案,但是解决方案对我没有用。在重新安装 Mac OS 后,我切换到了 3.2.5 版本。 - Alexander K.
这个答案与所给问题不符。问题陈述如下: - BadPirate
这个答案与所给问题不符。问题陈述为:“默认选项设置为YES的符号被隐藏了。”链接给出的答案是:“解决方案是在项目中所有目标的所有构建设置中将Symbols Hidden By Default设置为Yes。仍然不知道实际问题是什么。” - BadPirate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接