2011-12-30 28 views
28

我已经使用了升压架构从下面我的iPhone Xcode项目的链接被: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html的Xcode与提升:关于可见性设置连接(Id)的警告

它工作正常,但我总是得到数百苹果马赫的Ø链接(ID)警告,如:在__ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE全球弱符号__ZTVN5boost17bad_function_callE

直接访问意味着弱符号不能在运行时被覆盖。这可能是由不同的可见性设置编译的不同翻译单元造成的。

如何摆脱代码中的警告?

编辑: 通过设置符号由默认隐藏= YES,我设法摆脱了大部分的警告,但有3个左右,这将不会消失,谁能告诉我为什么?

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

回答

24

李四只是想出如何摆脱数百警告这样的: 设定设置到由默认构建隐藏整个目标或项目与符号是

+2

是'yes'问题或解决? :) – sarnold 2011-12-30 23:45:49

+0

设置为yes将修复警告 – Gob00st 2011-12-31 01:10:47

+2

有多尴尬。对于我来说,将默认的符号设置为“否”,可以去除使用特征库链接到库的类似警告。 – 2012-04-13 08:41:58

34

如果升压由多个包括项目,如果升压由多个项目包括每个项目必须具有相同的值

Symbols Hidden by Default 
Inline Methods Hidden 
+0

第二次我来到这个答案,它帮助我解决了警告。不知道该项目如何以“隐藏的内联方法”再次失去同步而结束。 Xcode更新改变了它?呃.. – 2016-10-23 16:54:28

+0

+1是的 - 不同于只提示需要匹配的'符号隐藏符号'的答案,我发现'内联方法隐藏* *还*需要匹配。 – aardvarkk 2016-11-03 14:54:02

0

,每个项目必须具有相同的值

符号由默认 隐藏联方法隐藏

nerith说的是对的,但在Xcode 4.6.3,他们是不是和“联方法隐藏的”上面“默认是隐藏的符号”,我设置gcc_symbols_private_extern是的,警告消失。

3

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

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

只需添加

cxxflags=-fvisibility=hidden 

cxxflags=-fvisibility-inlines-hidden 

bjam命令行。

+4

-fvisibility =隐藏意味着-fvisibility-inlines-hidden。只有前者是必要的。 – johnwbyrd 2015-09-19 00:50:49

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