import lib aus dll für MinGW



  • Hallo,

    vermutlich eine blöde Frage, aber wie erstellt man für MinGW eine
    import-library aus einer Dll?

    Hintergrund:
    möchte gern einen MySQL embedded server einbinden,
    krieg aber leider immer nur schöne Linkerfehler
    (linker findet die in der mysql.h deklarierten Funktionen nicht)

    Im Borland C++ Builder gibts dafür das tool "implib" welches aus der dll eine .lib erzeugt, die man dann dazulinken muss.

    Aber wie läuft das ganze dann mit MinGW?

    thx
    Martin



  • eigentlich müsste es die lib *.a heissen.
    falls du keine *.a haben möchtest sondern eine *.lib haben willst
    dann bei den linker einstellungen

    --output-lib irgendwas.lib
    

    mit angeben



  • danke für die Antwort,

    allerdings ist das Problem, dass ich weder eine *.lib, noch eine *.a hab.
    (ausser den libs, die bei mysql dabei waren).

    hab einfach mal die "libmySQL.lib" int .a umbenannt und eingebunden, aber
    gebracht hat das gar nix...

    hier mal ein Auszug aus den Fehlermeldungen:

    E:\Projects\MinGw\mql\Debug\main.o(.text+0x2242): In function `ZN10MQL_RESULTC2EP12st_mysql_res':
    E:\Projects\MinGw\mql\include\mql.cpp:129: undefined reference to `mysql_num_fields@4'
    

    Ich kenn's halt nur vom BCB6, wo man aus der "libmysql.dll" eine
    Import-library erzeugen und einbinden muss um den Linker zu versöhnen...

    thx
    Martin



  • ich glaub ich verstehe dich gerade nicht.

    1.) du willst eine dll erstellen die mysql benutzt.
    2.) du willst eine exe erstellen die mysql benutzt.
    3.) von mysql hast du header, libs und dlls



  • sorry, wenn ich irgendwo wirres Zeug geschrieben hab.

    Erfreuliche Nachricht:
    Hab natürlich selber nebenher auch noch gesucht und was gefunden.
    Jetzt gehts *freu*

    Was ich machen will:
    ich will eine *.exe mit MinGW Developer Studio erstellen,
    die den mysql embeded Server verwendet.

    Mysql Header Daten + Libs hab ich gehabt.
    Problem: bekomme oben genannte Linkerfehler (insgesammt sind's kanpp 20).

    Lösung:

    1. Mysql runterladen, is logisch (natürlich die Version, wo die header und libs dabei sind) + installieren

    2. das include-Verzeichnis im mysql-Installationsverzeichnis dem Projekt hinzufügen
      (Project->Settings->Compile: im Feld "Additional include directories" (ganz unten)

    3. evtl. das das "lib\debug" bzw "lib\opt" im mysql-Installationsverzeichnis dem Projekt hinzufügen
      (bin mir da aber ned sicher, ob man das braucht, im Zweifel einfach ausprobieren)
      Project->Settings->Link: Additional library path

    4. "import library" erstellen
      =============================
      Im MySQL - Installationsverzeichnis befindet sich der Ordner "embedded".
      Dort nach "libmysqld.dll" suchen.

    Als nächstes braucht man ein tool namens "pexports", zu finden hier:
    http://www.emmestech.com/software/cygwin/pexports-0.43/pexports-0.43.zip

    Dieses läßt man auf die oben genannte dll los:

    "pexports libmySQL.dll > libmySQLd.def"
    

    Dann erstellt man die library mit:

    dlltool --input-def libmySQLd.def --dllname libmySQLd.dll --output-lib libmySQLd.a -k
    

    (dlltool sollte bei MinGW dabei sein)

    die nun entstandende "libmySQLd.a" zum Projekt dazulinken.
    Die Linkerfehler kommen aber immer noch.

    Lösung:
    die Linkerfehler enthalten den Funktionsnamen + @ + XX,
    Beispiel: E:\Projects\MinGw\mql\include\mql.cpp:129: undefined reference to `mysql_num_fields@4'

    Jetzt in der libmySQLd.def den entsprechenden Eintrag suchen (hier "mysql_num_fields") und mit dem @ + XX erweitern (also "mysql_num_fields@4")

    Dieses für alle Linkerfehler durchführen.

    Dann nochmal das "dlltool" ausführen und die neue libmySQLd.a dem Projekt hinzufügen
    (Project -> Settings -> Link: im Feld "libraries")

    Fertisch.

    Quelle:
    http://www.synnottsoftware.com/tutorials/mysqlwindows.php
    (dort wird aber die "libmySQL.dll" (hier: "libmySQLd.dll") verwendet.
    Ohne es zu wissen vermute ich mal, dass man das braucht, wenn man eine normale Datenbank, nicht den embedded Server ansprechen will)

    Da steht auch nochmal was dazu:
    http://www.emmestech.com/software/cygwin/pexports-0.43/moron1.html

    Beispiel für den embedded Server:
    http://www.c-plusplus.net/forum/viewtopic.php?t=88356

    mfg
    Martin



  • Such mal nach pexports oder benutze das dlltool was beim MinGW dabei ist.

    (Notiz an mich selbst: Lies mehr als nur die ersten paar Beiträge.)



  • sfvzcvz



  • sfvzcvz



  • sfvzcvz



  • uyiyjfgh



  • uyiyjfgh



  • Super Erklärung und Anleitung.
    Endlich kann ich kompilieren!! 🙂 :)[cpp]


Anmelden zum Antworten