MinGW/GCC Bibliotheken neu linken

enkore

New member
In diesem Tutorial erkläre ich euch, wie man aus statischen Bibliotheken (*.a) DLLs/SOs macht und dabei auch am Modulnamen rumfummeln kann.

Eigentlich ist das ganze sehr simpel, man braucht nur den GCC, ar und strip (optional). Unter Windows bekommt man so eine Umgebung am einfachsten mit Cygwin und dem von mir empfohlenen TDM-GCC ( http://tdm-gcc.tdragon.net/ , auch als 64-bit Variante. Auf der Seite gibts auch einen Haufen Libs für 64-Bit vorkompiliert...)

Schritt 1: Die Bibliothek besorgen. Findet man in /lib/ oder /mingw<irgendwas>/lib. Die Datei hat die Endung ".a".

Schritt 2: Die Bibliothek in einen vorzugsweise leeren Ordner kopieren.

Schritt 3:
Code:
ar x libMeineLib.a
Damit wird die Bibliothek entpackt. ENTPACKT? Ja richtig, Bibliotheken sind unter GCC und VC mit dem Tool ar zusammengepackte Objektdateien. Bibliotheken von VC (.lib) und GCC (.a) sind unter Windows binärkompatibel. (Ausser bei C++, aber das sollte ja klar sein.)

Schritt 4: Bibliothek neu zusammensetzen.
Code:
g++ -Wl,--out-implib=libGewünschterName.dll.a,--output=NameDerDll.dll *.o --shared
--out-implib setzt den Namen der Importbibliothek, sie wird zum Linken benötgit.
--output setzt den Namen des Agriprodukts äh Binary.
*.o, klar bindet alle Objektdateien im aktuellen Ordner ein (deswegen vorzugsweise leer)
--shared sorgt dafür dass es dann auch ne DLL wird.

Schritt 5: DLL verkleinern
Code:
strip --strip-all NameDerDll.dll
Entfernt alles unnötige von der DLL.

Das sollte übrigens so auch unter Linux gehen. Funktioniert nat. auch für 64-bit Umgebungen...
 
Zuletzt bearbeitet:
Oben