2011-12-30 29 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