Erzwingen Aufnahme der statischen Bibliothek Objektdateien, die exportieren keine Symbole (GCC / iPhone)

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

Frage

Ich bin eine statische Bibliothek für den Einsatz in Anwendungen für das iPhone zu erstellen. Es enthält eine Reihe von Quelldateien, die keine Symbole exportieren, alles, was sie tun, ist eine statische Instanz einer Klasse instanziiert, die dann einigen Code in seinem Konstruktor ausgeführt wird, die an anderer Stelle verschiedene Dinge mit einer zentralen Manager-Klasse registriert. Das alles funktioniert gut, wenn der Code als Teil einer Standard-iPhone-Anwendung erstellt wird, aber wenn es in eine statische Bibliothek getrennt wird diese Dateien Sie es nicht in die endgültige Anwendung binär machen und so die Konstrukteure für die privaten Klasseninstanzen sie don enthalten ‚t erhalten läuft, und dies führt zu Problemen. Ich habe jede Build-Option zu tun mit toten Strippen ausgeschaltet und so weiter sowohl für die statische Bibliothek zu bauen und die Endanwendung zu bauen.

Ich lief in dieser Frage auf dem Metrowerks Compiler vor einer Weile, aber in diesem Fall war es vorkommen, auch wenn der Code in einer einzigen Anwendung ohne Zwischen Bibliotheken gebaut wurde. Die Lösung war ganz einfach: nur __declspec(force_export) auf den privaten Klasseninstanzen verwenden und alles ist gut

.

Gibt es eine Entsprechung für GCC / iPhone? Ich verwende Xcode 3.1.4 mit GCC 4.2 und Targeting iPhone OS 3.1. Alternativ ist es eine Möglichkeit, um die Anwendung zu sagen, in jeder Objektdatei in der statischen Bibliothek zu verknüpfen, unabhängig davon, ob oder nicht es ist ausdrücklich verwiesen wird? Ich habe mit ar bestätigt, dass der volle Satz von Objektdateien in die statische Bibliothek machen.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich denke, die Option, die Sie suchen ist -all_load:

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

Andere Tipps

-all_load hat einige Probleme, wenn Sie viele Bibliotheken verknüpfen und / oder Frameworks (Mac OS X) passieren. In diesem Fall sollten Sie nur alle Symbole aus einer bestimmten Bibliothek erzwingen, indem -force_load mit:

g++ test.cpp -o test -force_load libtoload.a
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top