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é!
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
Si boost est inclus dans plusieurs projets, chaque projet doit avoir les mêmes valeurs pour
Symbols Hidden by Default
Inline Methods Hidden
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
.
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é.
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++
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