MySQL mit Eclipse CDT

Schnelle objektorientierte, kompilierende Programmiersprache.
abap_true
Beiträge: 25
Registriert: Di Feb 05, 2013 1:38 pm
Wohnort: Köln

MySQL mit Eclipse CDT

Beitrag von abap_true » Fr Apr 12, 2013 9:42 am

Hallo zusammen,

ich benutze den MingW GCC compiler aus dem CodeBlocks Paket und entwickle mit eclipse CDT juno.
Jetzt möchte ich auf eine MySQL DB zugreifen und habe dazu ein erstes einfaches Testprogramm geschrieben.

Code: Alles auswählen

#include <my_global.h>
#include <mysql.h>

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());
}
Ich habe den MySQL Connector C 6.0.2 runtergeladen und entpackt, das bin-Verzeichnis meinen PATH hinzugefügt.
Die Header Dateien in den Projekt Properties includiert und die Libraries mysqlclient und libmysql (braucht man beide oder reicht mysqlclient) beim MinGW Linker angegeben, sowie den Library search path.

Wenn ich jetzt den Debug-Build starte bekomme ich leider:
D:\Dokumente und Einstellungen\cke\Anwendungen\CodeBlocks\mysql-connector-c-noinstall-6.0.2-win32\include/my_dbug.h:98:20: fatal error: crtdbg.h: No such file or directory
compilation terminated.

Da hat er Recht :twisted: crtdbg.h gibt es wirklich nicht, aber warum sucht der Build danach? Braucht man ausser dem mysql-Connector noch etwas?

Als Projekt habe ich übringens ein normales C-Projekt angelegt.

Ich freue mich, wenn mir jemand weiterhelfen könnte!

Grüße chris

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: MySQL mit Eclipse CDT

Beitrag von Xin » Fr Apr 12, 2013 12:50 pm

Hmm... der C-Connector scheint mir von Visual Studio abhängig zu sein!?

Die crtdbg.h ist die Debug-Version der C-RunTime, also ein Standard-Header unter Windows. Hier müsste ich für GCC selbst nachforschen und ausprobieren, aber das gehst frühstens morgen.
Vielleicht hilft das?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

abap_true
Beiträge: 25
Registriert: Di Feb 05, 2013 1:38 pm
Wohnort: Köln

Re: MySQL mit Eclipse CDT

Beitrag von abap_true » Fr Apr 12, 2013 1:07 pm

Die Seite hinter Deinem Link hatte ich schon gelesen und auch die Weiterverlinkungen :D

Gelöst wurde das Problem durch:
"ich hab die <windows.h> falsch eingebunden... . Es läuft jetzt! "

aber wie kann man eine Header-Datei falsch einbinden? Höchstens in der falschen Reihenfolge, oder?
Wenn ich die windows.h vor der my_global.h einbinde hilft mir das jedenfalls nicht weiter.

Ich habe auch schon gefühlte 1000 weiter Webseiten gelesen und alles scheint darauf hinauszulaufen, dass mir ein VisualC fehlt.
Ich möchte aber kein ganzes VisualC installieren, um den mysql-Connector zu nutzen. Abgesehen davon, hab ich auf der Windows Kiste keine Admin-Rechte und will sie auch gar nicht :-)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: MySQL mit Eclipse CDT

Beitrag von Xin » Fr Apr 12, 2013 1:14 pm

abap_true hat geschrieben:Abgesehen davon, hab ich auf der Windows Kiste keine Admin-Rechte und will sie auch gar nicht :-)
Dann muss Dir Dein Admin VC installieren oder Du musst etwas warten. Ich kann vor dem Wochenende das leider nicht selbst ausprobieren, obwohl es mich für das kommende MySQL Tutorial auch interessiert.

Immerhin wissen wir aber, dass es wohl geht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

abap_true
Beiträge: 25
Registriert: Di Feb 05, 2013 1:38 pm
Wohnort: Köln

Re: MySQL mit Eclipse CDT

Beitrag von abap_true » Fr Apr 12, 2013 3:04 pm

Also man kann #include <my_global.h> aus dem MySQL-Connecdtor auch weglassen und dafür #include <winsock2.h> aus MinGW dazupacken, dann lässt sich das Programm kompilieren und macht sogar was es soll :-)

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <mysql.h>

int main(int argc, char **argv) {

	printf("MySQL client version: %s\n", mysql_get_client_info());
	return EXIT_SUCCESS;
}
Solange man also my_global.h nicht braucht reicht MinGW und die Connector Dateien aus.
Leider muss ich noch die libmysql.dll in das Programmverzeichnis kopieren :-( Kann mir jemand sagen, ob und wie ich dem Eclipse Linker beibringen kann, die DLL ins EXE zu packen?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: MySQL mit Eclipse CDT

Beitrag von cloidnerux » Fr Apr 12, 2013 3:11 pm

Kann mir jemand sagen, ob und wie ich dem Eclipse Linker beibringen kann, die DLL ins EXE zu packen?
Indem du statische Libs nutzt? Der Sinn von "Dynamic Link Librarys" ist, eben zur Laufzeit geladen zu werden und nicht mit dem Hauptprogramm gelinkt wird.
Such dir also die statischen libs und binde diese ein.
Redundanz macht wiederholen unnötig.
quod erat expectandum

abap_true
Beiträge: 25
Registriert: Di Feb 05, 2013 1:38 pm
Wohnort: Köln

Re: MySQL mit Eclipse CDT

Beitrag von abap_true » Fr Apr 12, 2013 3:50 pm

ist das dann der Unterschied zwischen den Libraries mysqlclient.lib und libmysql.lib? Zur einen gibt es ne DLL zur anderen nicht.
Bei der Verwendung der mysqlclient.lib ohne libmysql.lib bekomme ich unendlich viele Fehlermeldungen. Das Gleiche passiert wenn ich in der Reihenfolge mysqlclient.lib, libmysql.lib einbinde. Wenn ich aber zuerst libmysql.lib und dann mysqlclient.lib einbinde ist alles hübsch.
Bedeutet das der Compiler nach erfolgreichem Einbinden der libmysql.lib in der mysqlclient.lib nichts Neues mehr findet und deshalb nicht meckert?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: MySQL mit Eclipse CDT

Beitrag von Xin » So Apr 14, 2013 10:46 am

abap_true hat geschrieben:ist das dann der Unterschied zwischen den Libraries mysqlclient.lib und libmysql.lib? Zur einen gibt es ne DLL zur anderen nicht.
Da müsste man in der Doku nachlesen, was die genauen Unterschiede sind.

Du suchst die Funktion "mysql_get_client_info". Für mich stellte sich auch erst die Frage, welche Lib ich dafür benötige. Eine Lib und ihre dazugehörige DLL haben üblicherweise den gleichen Namen. Mit dem Dependency Walker kann man in DLLs reinschauen:
depwalker.jpg
Die gesuchte Funktion finde ich hier. Also brauche ich die libmysql.dll und deswegen auch die libmysql.lib.

Die beiden anderen Libs sind sehr groß, sie scheinen also vorrangig dafür da zu sein, dass man die komplette MySQL-Funktionalität statisch in das eigene Programm einbinden kann. Wir begnügen uns einfach mal mit der .dll.
abap_true hat geschrieben:Bei der Verwendung der mysqlclient.lib ohne libmysql.lib bekomme ich unendlich viele Fehlermeldungen. Das Gleiche passiert wenn ich in der Reihenfolge mysqlclient.lib, libmysql.lib einbinde. Wenn ich aber zuerst libmysql.lib und dann mysqlclient.lib einbinde ist alles hübsch.
mysqlclient.lib benötige ich nicht.
abap_true hat geschrieben:Bedeutet das der Compiler nach erfolgreichem Einbinden der libmysql.lib in der mysqlclient.lib nichts Neues mehr findet und deshalb nicht meckert?
Ich habe eher die umgekehrte vermutung: mysqlclient.lib benötigt Funktionalität, die libmysql.lib liefert. Was da der Plan ist, kann ich aber auch nicht sagen, da mir bisher die Verwendung der .dll gereicht hat, entsprechend binde ich nur libmysql.lib ein.

Ich konnte Dein Programm mit Codeblocks kompilieren - grundsätzlich sollte damit keine Abhängigkeit zu den VisualStudio-Includes bestehen, da ich auch VC2010 installiert habe. Ich musste jedoch die 32-Bit Version des Servers nachinstallieren (GCC ist nur 32 Bit). Dann erhielt ich auch die korrekte Ausgabe.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

abap_true
Beiträge: 25
Registriert: Di Feb 05, 2013 1:38 pm
Wohnort: Köln

Re: MySQL mit Eclipse CDT

Beitrag von abap_true » Mi Apr 17, 2013 7:40 am

Hallo Xin,

schönes Tool, dieser Dependency Walker!
Wenn ich Dich richtig verstanden habe, bist Du auch der Ansicht, dass es sich bei "mysqlclient.lib" um eine statische Library handelt. Hast Du auch ein Tool zu Hand, mit dem man in statische Library's gucken kann? Und was wäre ein Äquivalent unter Linux?
Xin hat geschrieben:Ich konnte Dein Programm mit Codeblocks kompilieren - grundsätzlich sollte damit keine Abhängigkeit zu den VisualStudio-Includes bestehen
Ja, kann man, solange die <winsock2.h> aus MinGW eingebunden wird, sonst "error: unknown type name 'SOCKET'" :D

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: MySQL mit Eclipse CDT

Beitrag von Xin » Mi Apr 17, 2013 7:58 am

Ehrlich gesagt keine Ahnung. Aber ich habe mal nach lib und dump geguckt und fand "libdump" ;-)

Ich habe es noch nicht ausprobiert, was mich viel mehr interessiert ist der Quelltext. Auf kurz oder lang muss ich selbst ja auch .libs schreiben können, da könnte der Quelltext hilftreich sein. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten