我一直在使用以下链接中的增强框架来实现我的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个警告也消失了!所以我的解决方案确实有效!
答案 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