web-dev-qa-db-fra.com

xcode avec boost: éditeur de liens (Id) Avertissement sur les paramètres de visibilité

J'utilise un cadre de renforcement à partir du lien ci-dessous pour mon projet iPhone Xcode: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html

cela fonctionne bien, mais je reçois toujours des centaines de mises en garde Apple Mach-O Linker (id) telles que:

L'accès direct dans __ZN5boost15program_options6detail7cmdline24handle_adders_adders_parserERSt6vectorISsSaISsEE au symbole global faible __ZTVN5boost17bad_function_callE signifie que le symbole faible ne peut pas être ignoré à l'exécution. Cela était probablement dû au fait que différentes unités de traduction étaient compilées avec des paramètres de visibilité différents.

Comment se débarrasser de ces avertissements dans le code?

édité: Par set Symboles cachés par défaut = OUI, j'ai réussi à me débarrasser de la plupart des avertissements, mais il en reste trois autres qui ne vont pas disparaître. Quelqu'un peut-il me dire pourquoi?

édité à nouveau: après une reconstruction, les 3 derniers avertissements ont également disparu! Donc ma solution a fonctionné!

29
Gob00st

Doe a juste imaginé comment se débarrasser de centaines d’avertissements comme celui-ci: paramétré pour une cible ou un projet entier avec le symbole Symboles masqués par défaut build surYES

24
Gob00st

Si boost est inclus dans plusieurs projets, chaque projet doit avoir les mêmes valeurs pour

 Symbols Hidden by Default
 Inline Methods Hidden
35
cyrilchampier

L'éditeur de liens se plaint de différents paramètres de visibilité entre votre projet et Boost.

Vous pouvez également résoudre ce problème en recompilant Boost avec les mêmes paramètres de compatibilité.

Il suffit d'ajouter

cxxflags=-fvisibility=hidden

et

cxxflags=-fvisibility-inlines-hidden

sur la ligne de commande bjam.

4
Benoit Blanchon

Si boost est inclus dans plusieurs projets, chaque projet doit avoir les mêmes valeurs pour

Symboles masqués par les méthodes en ligne par défaut masquées

nerith dit est correct, mais dans Xcode 4.6.3, il ne s'agit pas des symboles "Symboles masqués par défaut" et "Méthodes en ligne masquées" ci-dessus, et je règle l'option gcc_symbols_private_extern sur yes, l'avertissement est supprimé.

1
Samuel Lu

Définition Symboles masqués par défaut àNOet Méthodes en ligne masquées àNOa fonctionné pour moi.Pas besoin d'ajouter d'indicateur à Autres indicateurs C++

1
Desert Rose

J'ai aussi eu ce problème.

Il se trouve que je faisais négligemment quelque chose comme ceci:

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

Que j'ai résolu en changeant pour:

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