mingw - Library-Typen
-
Ich will mingw benutzen, um meine Linux-Programme unter Windows kompilieren zu können. Einiges funktioniert schon, aber ich habe noch Probleme mit den verschiedenen Library-Typen. So stellte ich fest, dass zusätzliche Libraries vom Typ <name>.a nicht akzeptiert werden (undefined reference), wohl aber Libraries vom Typ <name>.dll.a. Warum ist das so?
Kennt irgendjemand eine Doc, wo solche Zusammenhänge erklärt werden, also was wo wann unter welchen Umständen gebraucht wird? Seit 14 Tagen grase ich das Internet ab, aber eine übersichtliche Darstellung über die grundsätzlichen Dinge habe ich noch nicht gefunden. Auch die Artikel auf mingw.org sind teilweilse so nichtssagend wie breit angelegt.
Gruß erin
-
ich vermute mal, dass liegt an dem beschränkten lookup-Verhalten der -l -Optionen. Probier mal -l: mit folgenden kompletten Librarynamen
-
Leider hat es damit nichts zu tun. Auch wenn ich in der Kommandozeile (oder im Makefile) die komplette Library angebe, wird nur die dll-Form akzeptiert. Ich mach's mal am konreten Beispiel SDL fest. Installiert wird aus den Sourcen SDL-1.2.13.tar.gz. Nach ./configure, make und make install liegen diese beiden Libraries in /mingw/lib:
libSDL.a - 9470 KB
libSDL.dll.a - 120 KBMit der Option -lSDL muss die zweite lib vorhanden sein, die erste kann ruhig fehlen. Das funktioniert auch, wenn die zweite lib in libSDL.a umbenannt wird. Fehlt allerdings die libSDL.dll.a, geht gar nichts, auch wenn ich angebe -l:libSDL.a.
Die libSDL.dll.a wird übrigens nur unter mingw und Windows erzeugt, unter Linux nicht. Ich denke, das regelt ./configure. Das bedeutet andererseits, dass man nicht ohne weiteres die unter Linux erzeugten libs nach MingGW transportieren kann, es sei denn, man bastelt in den config-Scripten herum. Davon habe ich aber keine Ahnung.
Was mich weiter stutzig macht, ist die Dateigröße. Wieso kommt man unter MinGW mit 120 KB aus, während die eigentliche Library fast 8 mal so groß ist? Mir kam der Gedanke, dass in diesem Fall auf die SDL.dll in /mingw/bin zurckgegriffen wird. Aber das Fehlen dieser DLL macht sich beim Kompilieren eines Testprogramms nicht bemerkbar. Allerdings greift das Testprogramm nur auf wenige Funktion von SDL zurck (Intitialisierung des OpenGL-SDL-Fensters).
Wird das alles etwas einfacher, wenn man MinGW als Crosscompiler unter Linux laufen lässt?