l'inclusion des fichiers Forcing objet de bibliothèque statique qui n'exporte pas de symboles (GCC / iPhone)

StackOverflow https://stackoverflow.com/questions/1450748

Question

Je crée une bibliothèque statique pour une utilisation dans les applications iPhone. Il contient un certain nombre de fichiers source qui exportent pas de symboles, tout ce qu'ils font est instancier une instance statique d'une classe qui exécute alors un code dans son constructeur qui enregistre diverses choses avec une classe de gestionnaire central ailleurs. Tout cela fonctionne très bien lorsque le code est construit dans le cadre d'une application iPhone standard, mais quand il est séparé en une bibliothèque statique ces fichiers ne font pas dans le binaire de l'application finale et donc les constructeurs pour les instances de classe privées qu'ils contiennent don « t get run, et cela pose des problèmes. Je l'ai éteint toutes les options de construction à faire avec décapage mort et ainsi de suite pour les deux construction de la bibliothèque statique et la construction de l'application finale.

Je suis tombé sur cette question sur le compilateur Metrowerks il y a un moment, mais dans ce cas, il se produisait même quand le code a été construit en une seule application sans bibliothèques intermédiaires. La solution est assez simple: il suffit d'utiliser __declspec(force_export) sur les instances de classe privée et tout va bien

.

Y at-il équivalent pour GCC / iPhone? J'utilise Xcode 3.1.4 avec GCC 4.2 et le ciblage iPhone OS 3.1. est encore là une façon de dire à l'application de lier dans chaque fichier objet dans la bibliothèque statique, peu importe si oui ou non il est explicitement fait référence? Je l'ai confirmé à l'aide ar que l'ensemble des fichiers objets sont fait dans la bibliothèque statique.

Merci d'avance.

Était-ce utile?

La solution

Je pense que l'option que vous recherchez est -all_load:

   -all_load
       Loads all members of static archive libraries.  See man ld(1) for
       more information.

Autres conseils

-all_load a quelques problèmes si vous arrivez à relier de nombreuses bibliothèques et / ou des cadres (Mac OS X). Dans ce cas, vous ne devez forcer tous les symboles d'une bibliothèque spécifique en utilisant -force_load:

g++ test.cpp -o test -force_load libtoload.a
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top