Einbinden von mysql.h und libmysql.lib in den Compiler

Tyg3r

Erfahrenes Mitglied
Hi,

ich verwende Code::Blocks mit dem GNU GCC Compiler.

Habe mir soeben MySQL 5 installiert. Dort sind ja die Header und die Libs mitgeliefert.
Die libmysql.lib habe ich bei den "Build options" gelinkt.
Das Verzeichnis mit den Header-Files (z.B. mysql.h) habe ich über die Compilereinstellungen bekannt gegeben.

Im Source habe ich folgendes stehen:
Code:
#if defined __WIN32__ || _MSC_VER
    #include <windows.h>
#endif
#include <mysql.h>

Und dennoch erhalte ich beim Compile-Vorgang folgende Fehlermeldung:
undefined reference to 'mysql_init@4'

Kann sich einer erklären woran das liegt?
Der Include von windows.h findet definitiv sachgemäß statt, ändere ich im Kompiler das Verzeichnis, meckert er sofort, dass er das File nicht findet.

Ich nach einigem Suchen gelesen, dass man die libmysql.lib in libmysql.a umbenennen soll. Habe ich auch versucht, gleiches Resultat.

Vielen Dank für Eure Hilfe!
Gruß tyg3r
 
Hi.
Habe mir soeben MySQL 5 installiert. Dort sind ja die Header und die Libs mitgeliefert.
Die libmysql.lib habe ich bei den "Build options" gelinkt.
Hast du es da unter den Bibliotheken hinzugefügt, oder wirklich als zusätzliche Option eingefügt? Für welches Build Target hast du das gemacht und welches Build Target verwendest du? (Debug oder Release)

Gruß
 
Hi,

danke für die Antwort.
Ich habe unter dem Projekt die Build Options geöffnet und unter dem Reiter "Linker" die Datei der Link Library hinzugefügt.

Build Target (Debug oder Release) sagt mir leider nichts, finde dort auch nichts entsprechendes.

Ich habe im gleichen Feld die libws2_32.a für Sockets hinzugefügt, was auch wunderbar funktioniert.

Vielen Dank für die Hilfe!
Gruß tyg3r
 
Hi.

Das jeweilige Build-Target ist auf dem Toolbar immer zu sehen. Im Build Options Dialog kann man auf der linken Seite die Targets auswählen (falls mehrere da sind).

Poste mal deine Projektdatei (zum Anhängen einfach in .txt umbenennen).

Gruß
 
Hi.

Eigentlich sieht deine Projektdatei recht gut aus. Allerdings hast du da Leerzeichen im Pfad zur mysql.lib - die könnten evlt. stören. Bekommst du noch andere Meldungen, das die Datei nicht gefunden wird o.ä.?

Gruß
 
Hi,

nein, nur wenn ich die mysql.h aus dem Projekt entferne, erhalte ich die Meldung "File not found", nachvollziehbar :)

Ich hatte die libmysql.lib auch schon ins Code::Blocks Verzeichnis kopiert und die von dort aus eingebunden. Auch schon mit der Endung *.a
Kein Unterschied.

Gruß
 
Was mich etwas wundert, bei folgendem Code werden doch Templates aus der mysql.h verwendet, oder täusche ich mich da?

Code:
MYSQL       *connection;
MYSQL_RES   *result;
MYSQL_ROW   row;

Mit diesen Zeilen kann ich das kompilieren.

setze ich aber
connection=mysql_init(NULL);
hinten dran, meckert der Kompiler ...
(undefined reference to 'mysql_init@4')

Muß ich da vielleicht einen Namensbereich bekannt geben?

Gruß tyg3r
 
Hi.

Ich hab grad nochmal etwas recherchiert. Da MySQL mit dem MS Visual Compiler kompiliert wurde, kann die .lib Datei nicht von MinGW verwendet werden.

Man muss die .lib Datei für MinGW erst noch erstellen. (oder installiert einfach das dev-pak für libmysql)

Code:
pexports c:\mysql5\mysql.dll | sed "s/^_//" > mysqldll.def
dlltool -U -d mysqldll.def -l libmysql.a
Gruß
 
Hi,

habe auch nochmal etwas gesucht und es wird definitiv daran liegen :)

Meine Eingabeaufforderung meint, dass "pexports" kein Befehl ist ...
Entschuldige, aber habe sehr wenig Erfahrung mit solchen Vorgängen :/

Code:
cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a

Habe ich auch probiert, aber "reimp" ist kein Befehl ...

Super wenn Du mir da auch noch helfen könntest :)

Gruß tyg3r

PS: Pfade habe ich natürlich entsprechend ersetzt
 
Zurück