xcode with boost:链接器(Id)关于可见性设置的警告

时间:2011-12-30 23:33:03

标签: c++ xcode boost warnings

我一直在使用以下链接中的增强框架来实现我的iPhone Xcode项目: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html

它工作正常,但我总是得到数百个Apple Mach-O Linker(id)警告,如:

  

在__ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE中直接访问全局弱符号__ZTVN5boost17bad_function_callE表示在运行时无法覆盖弱符号。这可能是由于使用不同的可见性设置编译了不同的翻译单元造成的。

如何摆脱代码中的警告?

编辑: 通过设置默认隐藏的符号 = YES,我设法摆脱了大部分警告,但还有3个不会消失,有人可以告诉我原因吗?

再次编辑: 重建后剩下的3个警告也消失了!所以我的解决方案确实有效!

6 个答案:

答案 0 :(得分:35)

如果多个项目包含boost,则每个项目必须具有相同的

 Symbols Hidden by Default
 Inline Methods Hidden

答案 1 :(得分:24)

Doe刚刚想出如何摆脱这样的数百个警告: 使用默认隐藏的符号构建设置为

设置整个目标或项目

答案 2 :(得分:4)

链接器抱怨项目和Boost之间的可见性设置不同。

您还可以通过使用相同的兼容性设置重新编译Boost来解决该问题。

添加

cxxflags=-fvisibility=hidden

cxxflags=-fvisibility-inlines-hidden

bjam命令行。

答案 3 :(得分:1)

如果多个项目包含boost,则每个项目必须具有相同的

默认隐藏的符号  内联方法隐藏

nerith说是对的,但是在Xcode 4.6.3中,它们不是上面的“默认隐藏的符号”和“隐藏的内联方法”,并且我将gcc_symbols_private_extern设置为是,警告消失了。

答案 4 :(得分:1)

默认隐藏的符号设置为,将<隐藏>隐藏的内联方法设置为对我有用。将任何标志添加到其他C ++标志

答案 5 :(得分:0)

我也有这个问题。

事实证明我不小心做了这样的事情:

#pragma GCC visibility push(default)
#include <SomeExternalLibrary.h>
void myExampleSymbol();
#pragma GCC visibility pop

我通过改为:

解决了这个问题
#include <SomeExternalLibrary.h>
#pragma GCC visibility push(default)
void myExampleSymbol();
#pragma GCC visibility pop