MySql

Thomasio

Erfahrenes Mitglied
Ich habe schon 127 Mal Anlauf genommen, aber am Ende immer frustriert aufgegeben, weil ich es nicht auf die Reihe bringe.
Ich habe auch hier im Forum schon danach gefragt, auch Antwort bekommen, wochenlang herumprobiert, aber am Ende mehr Fehler als sonstwas produziert.

Hier also Anlauf Nr. 128:

Ich habe eine MySql Datenbank bei einem Provider gemietet.
Zugangsdaten habe ich, PHPMyAdmin ist beim Provider vorhanden und funktioniert, RemoteAccess ist enabled.
Jetzt will ich eine Anwendung schreiben, die auf meinem Heim-PC läuft und auf die DB zugreift.
Das Ganze muss nichts tolles können, nur ein paar simple queries wie SELECT, UPDATE, INSERT und DELETE.

Gelesen habe ich zum Thema derartig viel, dass ich vermutlich einiges durcheinander bringe, darum mal ganz langsam und ganz von vorne.

Von meinem Provider habe ich die Info, er hat http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-noinstall-5.1.56-win32.zip installiert.
Begriffen habe ich, dass ich bei mir die selbe Version von MySql installieren muss.
Begriffen habe ich auch, dass mein Compiler Code::Blocks/MinGW/GCC einiges an Vorbereitungen braucht, bevor ich die MySql Library überhaupt verwenden kann.

Das wars aber auch schon, danach ist Bahnhof.

Angefangen damit, dass auf meinem PC Win7 Ultimate 64 bit läuft.
Wenn in einer Anleitung steht, default ist c:\Program Files\ dann passt das schon nicht, denn unter Win7 in deutsch heisst das Verzeichnis c:\Programme.
Anscheinend funktioniert das trotzdem, vermutlich sind die beiden Namen virtuell verknüpft, oder wie man das nennen soll, aber es kommt ja noch schlimmer.
In der 64bit Version heisst das Verzeichnis c:\Programme(x86)\ und alles was 32bit ist, landet da drin, selbst wenn man bei Installation angibt, dass es in c:\Program Files\ soll.
Wenn ich dann z.B. in der Anleitung zu mysql++ lese, ich soll die Datei Makefile.mingw editieren und Verzeichnisnamen passend ändern, dann stehe ich schon völlig auf dem Schlauch, weil ich nicht mal weiss, wie die richtig heissen müssen.
Auf der Suche nach einer Alternative findet man dann Connector/C++, aber der ist für VisualC++ und unterstützt MinGW überhaupt nicht, allerdings gibt es den auch in 64bit, während mysql++ nur in 32bit existiert.
Im Web findet man dann 100 Seiten, die einem erklären wollen, wie man haufenweise .dll und .lib konvertieren soll, mit reimp und pexport und dlltool, aber alles was da bei mir raus kommt ist eine libmysql.a mit NULL byte, wobei ich nicht mal weiss, ob ich denn nun libmysql.lib oder mysqlclient.lib, oder beides brauche.

Hier im Forum habe ich dann noch einen Kommentar gefunden, dass man diese Wrapper gar nicht braucht, sondern auch die "simple C Schnittstelle" nehmen kann, aber wie das funktionieren soll, dazu habe ich im gesamten Web nichts gefunden.

Um Probleme mit Win7 und 64bit zu umgehen habe ich mir mit VirtualBox ein virtuelles XP in 32bit installiert, aber auch damit haben meine .a nur NULL byte.
Dazu kommen dann andere Fehlermeldungen, wie "Invalid or corrupt import library" und 1000 Weitere.

In kurz:
Hat jemand Erbarmen mit mir und erklärt mir "für Doofe" wie man, angefangen bei frisch installiertem WindowsXP plus Code_Blocks/MinGW, zu "#include <mysql.h>" kommt?
 
Hi.

Zeige einfach was du gemacht hast und die Ausgabe davon.

Warum packst du denn irgendwelche Dateien manuell in %programfiles%? Entpacke die Quellen in einem beliebigen Verzeichnis wo du auch genau weißt wie es heißt.

Bist du denn in der Lage ein einfaches MySQL C Programm zu erstellen? Das solltest du mal zuerst machen bevor du versuchst mysql++ zu kompilieren.

Gruß
 
Nein, ich bin nicht in der Lage ein "einfaches MySQL C Programm" zu erstellen, weil ich schon bevor ich überhaupt mit der ersten Zeile Code anfangen könnte stolpere über:

1) MySql braucht mysql.h
2) mysql.h braucht diverse .dll und .lib
3) MinGW kann diese nicht direkt verwenden, sondern braucht .a
4) Meine Versuche irgendwas in .a umzuwandeln (ich weiss nicht mal genau was ich da brauche) enden mit Dateigrösse 0.

Genau das hatte ich gemeint mit:

... dass man diese Wrapper gar nicht braucht, sondern auch die "simple C Schnittstelle" nehmen kann, aber wie das funktionieren soll, dazu habe ich im gesamten Web nichts gefunden.
 
Ja, das ist ein gutes Beispiel, ich habe versucht Wort für Wort den Beitrag da unten auf der Seite zu befolgen.
Das reicht genau bis zur Zeile

pexports libmySQL.dll | sed 's/^_//' > libmySQL.def

Wenn ich das in meine Eingabeaufforderung eingebe, bekomme ich "Der Befehl sed ist entweder falsch geschrieben oder existiert nicht".
Suche ich dann bei Google nach +"pexports" +"libmySQL.dll" +"libmySQL.def", dann finden sich ein paar Seiten, wo der Befehl kürzer geschrieben wird, einfach nur

pexports libmySQL.dll > libmySQL.def

aber wenn ich das mache, und danach (wieder zurück zur ersten Seite) in meine Eingabeaufforderung eingebe

dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libMySQLclient.a -k

dann bekomme ich eine libMySQLclient.a mit NULL byte.

Spätestens an dieser Stelle ist Essig mit Methode und Struktur, da sitze ich davor, wie die Kuh vorm Bahnhof.

Spasseshalber habe ich dann trotzdem noch eine Zeile weiter unten geschaut, und da steht dann

g++ revolution.cpp -lws2_32 -lmysqlclient -o revolution.exe

aber ich rufe g++ nicht an der Eingabeaufforderung auf, ich habe Code::Blocks, ich klicke "Build", sprich ich muss (wenn ich denn die Schritte vorher irgendwann schaffe) die ganzen Optionen unter "Project - Build options" eingeben, aber da bin ich mir nicht sicher, wie das aussehen muss, vermutlich unter "Other Linker options", aber Syntax?
 
Ja, das ist ein gutes Beispiel, ich habe versucht Wort für Wort den Beitrag da unten auf der Seite zu befolgen.
Das reicht genau bis zur Zeile

pexports libmySQL.dll | sed 's/^_//' > libmySQL.def

Wenn ich das in meine Eingabeaufforderung eingebe, bekomme ich "Der Befehl sed ist entweder falsch geschrieben oder existiert nicht".
Evtl. solltest du dann sed erstmal installieren und sicherstellen, dass das Verzeichnis im Pfad ist... :eek:

http://gnuwin32.sourceforge.net/packages/sed.htm
Suche ich dann bei Google nach +"pexports" +"libmySQL.dll" +"libmySQL.def", dann finden sich ein paar Seiten, wo der Befehl kürzer geschrieben wird, einfach nur

pexports libmySQL.dll > libmySQL.def

aber wenn ich das mache
Wie sieht die libmySQL.def Datei aus? Gab es Fehlermeldungen?

Warum schreibst du soviel? Zeig doch einfach die Befehle auf der Kommandozeile - das geht schneller für dich und auch für mich da ich mir nicht den ganzen Text durchlesen muss.

Gruß
 
Zuerst mal ganz vielen Dank, dass du dir die Mühe machst mir zu helfen.

Ich wäre nie darauf gekommen, dass sed ein eigenes Programm ist, jetzt habe ich es installiert und wenigstens ist die Fehlermeldung eine Andere.
Ich weiss nicht genau wie ich "Zeig doch einfach die Befehle auf der Kommandozeile" machen soll, ich schreibe dir doch genau das hier rein, was ich da eintippe und was er antwortet (diesmal mache ich dir noch einen Screenshot dazu).

Was ich gemacht habe ist:

1) Path gesetzt, hier die komplette Zeile

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\MinGW\bin;C:\MinGW\libexec\gcc\mingw32\4.4.1;C:\MySQL\bin;C:\MySQL\lib\opt;C:\MinGW\sed\bin

2) libmySQL.dll kopiert nach D:\

3) Eingabeaufforderung den ganzen Befehl eingetippt ... siehe screenshot.
Das ergibt eine libmySQL.def mit 0 byte.

4) Den Befehl ohne "sed... " eingetippt, keine Fehlermeldung, ergibt eine libmySQL.def mit 2,76kb.

5) dlltool ... siehe screenshot, keinerlei Meldung.
Diesmal hat die libMYSQLclient.a 110kb (wenigstens mal nicht 0), aber ob das jetzt richtig ist? Ohne sed?
 

Anhänge

  • prompt.JPG
    prompt.JPG
    31,6 KB · Aufrufe: 26
Ich weiss nicht genau wie ich "Zeig doch einfach die Befehle auf der Kommandozeile" machen soll, ich schreibe dir doch genau das hier rein, was ich da eintippe und was er antwortet (diesmal mache ich dir noch einen Screenshot dazu).
Du bist aber auch ein schwerer Fall..

Warum - um Himmels Willlen - kopierst du denn nicht einfach alles was in der Konsole steht und fügst es hier ein? :confused: ? :confused: ?

3) Eingabeaufforderung den ganzen Befehl eingetippt ... siehe screenshot.
Das ergibt eine libmySQL.def mit 0 byte.
Das ist klar. sed hat keine Ausgabe produziert, da du ungültige Argumente übergeben hast.

Verwende statt der einfachen Anführungszeichen bei sed doppelte Anführungszeichen (Joshua McQuistan hat offenbar nicht cmd.exe benutzt sondern eine Bash) oder lass die Anführungszeichen ganz weg:
Code:
pexports.exe libmySQL.dll | sed.exe -e s/^_// > libmysql.def
4) Den Befehl ohne "sed... " eingetippt, keine Fehlermeldung, ergibt eine libmySQL.def mit 2,76kb.

5) dlltool ... siehe screenshot, keinerlei Meldung.
Diesmal hat die libMYSQLclient.a 110kb (wenigstens mal nicht 0), aber ob das jetzt richtig ist? Ohne sed?
Das kommt drauf an, ob die Symbole in der .def Datei einen führenden Unterstrich haben. Der Sinn des sed Aufrufes ist es den Unterstrich zu entfernen.

Gruß
 
:-( Ich weiss, dass ich mich öfter mal zu blöd anstelle.

Copy&Paste? Aus der Konsole? Vom virtuellenXP in VirtualBox zu IE8 unter Win7? Wie geht das?

Egal, ich habe jetzt endlich inkl sed (dank deiner Hilfe) eine libMYSQLclient.a mit 109kb.
Das ist doch schon mal was.

Wie gehts weiter?
libMYSQLclient.a kopieren nach C:\MinGW\lib?

Code::Blocks - Create a new project
Build options - Linker settings
Was eingeben? Unter "Link libraries" und/oder "Other linker options"?

Im Code, ganz oben, was includen?
Nur mysql.h?
Muss ich die vorher von C:\MySQL\include nach C:\MinGW\include kopieren?
 
Ich habe mir jetzt nicht alles durchgelesen, aber du musst die Library per Project->Build options->Linker settings->Add einbinden, entweder für einzelne Build targets oder für das ganze Projekt.
 
Zurück