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

Gob*_*0st 31 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个警告也消失了!所以我的解决方案确实有效

cyr*_*ier 35

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

 Symbols Hidden by Default
 Inline Methods Hidden
Run Code Online (Sandbox Code Playgroud)

  • +1是的——与仅建议“默认隐藏的符号”需要匹配的答案不同,我发现“隐藏的内联方法”*也*需要匹配。 (2认同)

Gob*_*0st 24

Doe只想弄清楚如何摆脱这样的数百个警告:设置整个目标或项目,将"默认隐藏符号"设置设置为YES

  • 无论以哪种方式设置"默认隐藏的符号"(是或否),boost编译器警告仍然存在.我在支持ARC的iOS项目中使用XCode 4.4中的LLVM编译器.仍在寻找解决方案...... (4认同)
  • 问题或解决方案是"是"吗?:) (2认同)
  • 多么尴尬 对于我将默认隐藏的符号设置为否,删除了使用Eigen链接到库的类似警告. (2认同)

Ben*_*hon 6

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

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

只需添加

cxxflags=-fvisibility=hidden
Run Code Online (Sandbox Code Playgroud)

cxxflags=-fvisibility-inlines-hidden
Run Code Online (Sandbox Code Playgroud)

bjam命令行。

  • -fvisibility=hidden 意味着 -fvisibility-inlines-hidden。只有前者是必要的。 (6认同)