2009-06-19 8 views
2

Ich mag eine gemeinsam genutzte Bibliothek von mehreren statischen Bibliotheken erstellen mit GCC unter OS X.GCC Wie eine Funktion aus statischer Bibliothek exportieren

In einigen statischen Libs, gibt es keinen Code in gemeinsam genutzten Bibliothek nennen, ich will nur um die Symbole in diesen statischen Bibliotheken zu exportieren. Dies funktioniert im Debug-Modus, aber nicht im Release-Modus (besonders wenn ich das Dead-Code-Striping aktiviere). Ich kann den Grund verstehen, gcc denke, dass diese Funktionen auf statischen Bibliotheken niemals verwendet werden. aber wie kann ich gcc zwingen, diese symbole einzuschließen?

Ich habe bereits versucht, die Option -u für den Loader hinzuzufügen, aber es erzeugt nur ein 'lokales' Symbol. wie man Linker ein Exportsymbol erzeugen lässt?

Auch ich frage mich, ob es einen Weg gibt, die Linker-Richtlinien im Quellcode an, ebenso wie die MSVC #pragrma comment(linker, "/INCLUDE:xxxx")

die Funktion I in statischen lib definiert ist wie:

extern "C" 
void test() {} 

Dank im Voraus! -Jonny

Antwort

1

Haben Sie versucht --whole-archive?

0

Verwenden Sie ar, um die statischen Bibliotheken in ihre konstituierenden Objektdateien zu zerlegen. Verknüpfen Sie dann diese Objekte, um die gemeinsame Bibliothek zu erstellen.

 
ar -x libstatic.a 
(produces a bunch of *.o files) 
gcc -shared -olibshared.so *.o # Linux 
ld -dylib -olibshared.dylib *.o # Mac OSX