Bibliothek in MingW einfügen



  • Ich möchte gern eine Bibliothek so einfügen, dass ich sie in jedem Programm mit #include und dem Bibliotheknamen aufrufen kann. Also wie die Standardbibliotheken sozusagen. Ich hab eine .h-Datei, eine .lib-Datei und eine .DLL Datei.

    MingW ist unter Windows7 im Standardordner installiert. Einfach die Datei zu den anderen Bibliotheken zu schieben hat scheinbar nicht funktioniert ^^



  • wie man Bibliotheken "per default" mit einbindet, weiß ich nicht.

    die .h-datei: enthält nur funktions-prototypen
    die .lib-datei: enthält die schon kompilierte lib. wenn du sie benutzten willst, musst du die .h per #include einbinden, damit der compiler weiß, wie die funktionen aus der lib heißen
    die .dll-datei: ist eine dynamische lib, ebenfalls vorkompiliert. die musst du aber zur LAUFZEIT des programms manuell einbinden. da brauchst du dann windows.h und funktionen aus der windows.h

    wenn du eine statische lib (".lib") beim kompilieren mit angeben willst, dann muss du das so machen:
    gcc -L /Pfad/zur/lib/Datei -l DateinameDerLib main.c -o main.exe

    die .h musst du in "main.c" includiert haben.

    wie gesagt, eine dynamische lib, also .dll (oder unter linux ".so") musst du selber in deinem code einbinden.



  • ach ja, eins noch: wenn du mit mingw arbeitest, musst die ".lib" auch mit mingw kompiliert worden sein (und nicht mit irgendeinem ms-zeug), sonst geht das nicht



  • Ich möchte aber nicht jedesmal beim Compilen den Standort angeben müssen, dazu müsst ich woohl erst mal wissen, wo MingW standardmäßig nach Bibliotheken sucht, wenn man nur #include <name> verwendet.



  • Der angegebene Ordner stimmt und trotzdem sagt er, dass er die .lib nicht findet?

    C:\Users\Verrain\Desktop>gcc -L C:\MingW\lib\c -l qrbg-c.lib t.c -o t
    c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: cannot fin
    d -lqrbg-c.lib
    collect2.exe: Fehler: ld gab 1 als Ende-Status zurück



  • http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

    hier steht, dass die option "-l datei.lib" nach "libdatei.lib" sucht.

    benenn mal die lib um zu "libqrbg-c.lib".



  • C:\Users\Verrain\Desktop>gcc -L C:\MingW\lib\c\release -l qrbg-c.lib t.c -o t
    c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: cannot fin
    d -lqrbg-c.lib
    collect2.exe: Fehler: ld gab 1 als Ende-Status zurück

    selbe Fehlermeldung.

    Ich hab gerad im Internet gefunden, das man bei MingW die .lib in .a umbenennen muss, ist dir dazu was bekannt?



  • ja, unter linux haben static libs die endung ".a".

    als letztes fällt mir nur noch ein:
    kopier die lib-datei in das selbe verzeichnis wie "t.c"

    dann
    gcc -L .\ -l qrbg-c.lib t.c -o t.exe



  • Er kann immer noch nicht's finden, ist es denn so schwer, in MingW 'ne neue Bibliothek einzufügen? xD



  • Verrain schrieb:

    Er kann immer noch nicht's finden, ist es denn so schwer, in MingW 'ne neue Bibliothek einzufügen? xD

    eigentlich nicht. bei mir funktionierts meistens.



  • also nochmal:
    1. die lib muss im selben verzeichnis liegen wie t.c
    2. die lib muss den namen haben: libqrbg-c.a
    3. aufruf:
    gcc -o t.exe t.c -L .\ -l qrbg-c


Log in to reply