gcc und statisches Verlinken von Library
-
Halo,
ich bin noch nicht so wirklich warm mit dem gcc geworden....Bisher ist dies der Weg, um von meinem Quellcode ein lauffähiges Programm zu bekommen:
g++ -c -I/usr/include/mysql <QUELLDATEI>
g++ -o <NAME DER AUSFÜHRBAREN DATEI> <NAME DER OBJEKTDATEI> -lmysqlclient -liowkit
Kann man das vielleicht alles in eine Zeile bringen?
SO, jetzt kann man ja per ldd <NAME DER AUSFÜHRBAREN DATEI> die dafür erforderlichen Bibliotheken sehen.
Ich habe gehört, daß man diese "Abhängikeit" durch statisches Verlinken wegoptimieren kann.
Stimmt das bzw. was bringt einem dann das statische Verlinken?
Wie mach ich das?Habe mich schon auf der GNU.GCC-Website "informiert", bloss werde ich aus den Infos nicht so wirklich schlau
-
In einer Zeile:
g++ -o <AUSFÜHRBARE DATEI> <ALLE QUELLDATEIEN> -lmysqlclient -liowkit
Statisch linken bedeutet nichts anderes als die Objekte, die die Funktionen einer .DLL/.so enthalten direkt ins eigene Programm zu linken. Solche "Objektsammlungen" haben unter Windows (glaube aber nur bei nicht-GCCs) die Endung .lib (Achtung: Kann auch eine Importbibliothek sein) und sonst .a - manchmal werden Dir auch bei der Produktinstallation (bspw von MysqlClient) diese Bibliotheken direkt mitinstalliert.
Ob statisch oder dynamisch gebunden werden soll kannst Du festlegen indem Du dem g++ -static oder -shared vor die -l Parameter setzt, das funktioniert aber natürlich nur wenn das static-Pendant der Bibliothek auch installiert ist. Alternativ kann man die Archive auch direkt mitlinken:
g++ -o <AUSGABE> <QUELLEN> /usr/lib/libmysqlclient.a /usr/lib/libiowkit.a
-
Super, dankeschön