我对Xcode 3.2.6和Xcode 4有很奇怪的错误。
Xcode 3.2.5在我的项目中没有错误。
默认情况下隐藏的符号选项设置为YES。
这些链接错误与模板类中的静态成员(指针)有关。 任何想法,编译器/链接器密钥,检查,什么?
答案 0 :(得分:2)
这与您编译的库中的符号可见性有关。 GCC 4.0开关-fvisibility = hidden选项旨在隐藏DSO /共享对象库的符号,以减少链接/加载时间。但是,在编译静态库时,我已经看到一些在线使用交换机的博客有些特殊的方式。我实际上无法找出这是什么效果或意图。据我所知,静态库需要为您打算从外部使用的函数公开符号信息。
我遇到了与boost :: exceptions相同的链接器错误。但是,为了捕获特定类型的异常,GCC需要类型信息,但这是一个运行时问题。因此,即使它正确地编译/链接,如果您打算从库外部捕获异常,那么在项目中隐藏符号信息不是正确的解决方案。请参阅Apple的文档:
如果符号使用另一个库中定义的对象的运行时类型标识(RTTI)信息,异常或动态强制转换,则如果符号需要处理由其他库启动的请求,则该符号必须可见。例如,如果为C ++标准库中的类型定义catch处理程序,并且希望捕获C ++标准库抛出的该类型的异常,则必须确保typeinfo对象可见。
我实际上需要使用此处描述的宏保护来修改异常标头,以使我的项目能够编译和链接: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 :(得分:1)