LordTerra Geschrieben 27. August 2007 Geschrieben 27. August 2007 hi so nach vielem hin und her hab ich mir jetzt ne umgebung zusammen gabastelt... also hab ne suse 9.3 laufen und schreibe zwar in dem eclipse kompeliere aber über makefile da ich leider noch net herraus bekommen hab wieso eclipse mir zwar meinen code fehlerfrei durchcompeliert (bringt keine fehlermeldungen) aber mir halt keine ausführbare datei erstellt bzw sie ausführt... also hier erstmal meine dateien dann zu meinem problem: main.c: /* main.c */ #include <stdio.h> #include <mysql.h> #include "common.h" #define def_db_host "10.0.88.104" #define def_db_user "test" #define def_db_name "avs" #define def_db_port 0 #define def_unix_socket NULL MYSQL *mysql; int main(int argc, char *argv[]){ MYSQL_RES *res_set; char *db_pass; db_pass = get_tty_password(NULL); mysql = db_connect (def_db_host, def_db_user, db_pass, def_db_name, def_db_port, def_unix_socket, 0); if(mysql == NULL){ exit(1); }else{ fprintf(stdout, "Verbunden.\n"); if(mysql_query(mysql, "select * from user")==0){ res_set = mysql_store_result(mysql); if(res_set != NULL){ print_result_set(mysql, res_set); mysql_free_result(res_set); }else{ if(mysql_field_count(mysql)>0){ fprintf(stderr, "Keine Ergebnismenge, mysql_store_result() gescheitert: %s\n", mysql_error(mysql)); }else{ printf("Abfrage nicht für Datenbankrückgabe vorgesehen.\n"); } } }else{ fprintf(stderr, "Abfrage gescheitert:%s\n",mysql_error(mysql)); } } db_disconnect(mysql); exit(0); } void print_result_set(MYSQL *mysql, MYSQL_RES *res_set){ unsigned int f; MYSQL_ROW row; printf("huhu"); while((row = mysql_fetch_row(res_set))!=NULL){ f=0; while(f<mysql_num_fields(res_set)){ if(f>0){ fputc('\t', stdout); fprintf(stdout, "%s", row[f]); f++; } } if(mysql_errno(mysql)==0){ fprintf(stdout,"Anzahl zurückgegebener Zeilen: %lu.\n", (unsigned long)mysql_num_rows(res_set)); }else{ fprintf(stderr, "mysql_fetch_row() gescheitert.\n"); } } } common.c: /* common.c */ #include <stdio.h> #include <mysql.h> #include "common.h" MYSQL *db_connect(char *db_host, char *db_user, char *db_pass, char *db_name, unsigned int db_port, char *unix_socket, unsigned int db_flags){ MYSQL *mysql; if((mysql = mysql_init(NULL))==NULL){ fprintf( stderr, "mysql_init() gescheitert \n"); return(NULL); } if(mysql_real_connect(mysql, db_host, db_user, db_pass, db_name, db_port, unix_socket,db_flags)==NULL){ fprintf(stderr, "mysql_real_connect() gescheitert \nFehler %u: %s\n", mysql_errno(mysql), mysql_error(mysql)); return(NULL); } } void db_disconnect(MYSQL *mysql){ mysql_close(mysql); } common.h #ifndef COMMON_H_ #define COMMON_H_ #endif /*COMMON_H_*/ MYSQL *db_connect(char *db_host, char *db_user, char *db_pass, char *db_name, unsigned int db_port, char *db_socket, unsigned int db_flags); void db_disconnect(MYSQL *mysql); makefile: CC = gcc INCLUDES = -I/usr/include/mysql LIBS = -L/usr/include/mysql -lmysqlclient -lm all: myapp main.o: main.c common.h $(CC) -c $(INCLUDES) main.c common.o: common.c common.h $(CC) -c $(INCLUDES) common.c myapp: main.o common.o $(CC) -o myapp main.o common.o $(LIBS) clean: rm -f myapp main.o common.o soweit zu dem code.. die hab ich aus dem buch "mysql in 21 tagen" so nun zu meinem problem: in der main.c in der zeile wo ich das mysq_query aufruf bzw ausführen lassen will bekomm ich ein speicherzugriffsfehler... nachdem ich nun duzend mal den code kontrolliert hab und ich einfach keinen fehler find, könnt ihr mir viellicht weiterhelfen... bin etwas ratlos wieso da nen speicherzugriffsfehler kommt... thx für hilfe LordTerra Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 In deiner db_connect-Funktion fehlt die return-Anweisung für den Erfolgsfall. Hat der Compiler keine Warnung ausgespuckt? Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 stimmt... ich depp ... aber nein mein netter compiler hat keine fehlermeldung gebracht... Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 print_result_set(mysql, res_set); so hier will ich ja jetzt das result auswerten.... als comilper meldung bekomm ich folgendes: main.c:49: warning: type mismatch with previous implicit declaration main.c:32: warning: previous implicit declaration of `print_result_set' main.c:49: warning: `print_result_set' was previously implicitly declared to return `int' das versteh ich auch net ich schreib doch nirgends das ich nen int zurück haben will wieso bringt der compiler so nen schwachsinn? Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 das versteh ich auch net ich schreib doch nirgends das ich nen int zurück haben will wieso bringt der compiler so nen schwachsinn?Hast du denn überhaupt irgendwo einen Prototypen für diese Funktion angegeben? Wenn du das nicht tust, geht C vom Rückgabetyp int aus. Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 ja jetzt wo du es schriebst... oh man viel vergessen in den paar jahren wo ich kein c mehr gemacht hab kennst du dich auch mit eclipse aus? Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 Klotzkopp kennst du dich mit eclipse aus? würde gern meinen eclipse noch so konfugurieren das er mir das programm auch ausführt aber irgendwas mach ich da noch falsch... also wenn du dich auskennst würde ich dich bitten mir entweder ne schritt für schritt erklärung zum einstellen des eclipse geben oder halt nen schon verhandenes tutorial ... weil im mom kompeliert er mir das programm aber bringt dann die fehlermeldung: Launching MySQL3 (Time of error: 27.August 2007 ... ) Reason: /home/lordterra/programme/workspace/MySQL3/Debug/MySQL3 not found und das stimmt auch also das verzeichnis MySQL3 in dem verzeichnis Debug gibt es net aber ich dachte eigentlich der sollte das selbst erzeugen... also ka wo da nun bei der erstellung der fehler liegt, von daher wäre mir ne schritt für schritt erklärung am liebsten... thx LordTerra Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 Klotzkopp kennst du dich mit eclipse aus?Nein, mit eclipse/CDT habe ich noch nichts gemacht. Gibt es wirklich keine Fehlermeldung beim Erstellen des Projekts? Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 also wenn ich es per makefile mache funktioniert das programm jetzt auch... also von daher kann es so schonmal keine fehlermeldung geben .. beim comilieren mit eclipse bringt er mir halt die fehlermeldung das der ordner net da wäre... hmmm muss ich mal googlen viellicht gibt es eclispe tutorials die mir zeigen was ich da noch im eclipse konfigurieren muss ... dank dir Zitieren
Guybrush Threepwood Geschrieben 27. August 2007 Geschrieben 27. August 2007 Ich würde jetzt mal vermuten das Eclipse im falschen Verzeichnis nach den MYSQL SDK Dateien sucht. Da wird es bestimmt eine Option geben wo du die Pfade zu den Header und Lib Dateien einstellen kannst... Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 hmmm nee also das hab ich ja schon gesetzt also die mysql.h findet er... er versucht halt auf nen verzeichnis zuzugreifen, das er meines erachtens erst selber erstellen müsste dieses MySQL3 (so heist mein projekt) in dem Debugordner Zitieren
Guybrush Threepwood Geschrieben 27. August 2007 Geschrieben 27. August 2007 dieses MySQL3 (so heist mein projekt) Achso, was gibt es denn alles in dem Debug Verzeichnis wenn du über Eclipse erstellst? (Hab selbst auch noch nicht mit Eclipse gearbeitet) Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 also der debugordner sieht wiefolgt aus: debug: datei in debug:makefile datei in debug:objects.mk datei in debug:sources.mk ordner in debug: src datei in src:common.d datei in src:common.o datei in src:main.d datei in src:main.o datei in src:subdir.mk Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 Invoking: GCC C Linker gcc -o"MySQL3" ./src/common.o ./src/main.o -l/usr/include/mysql\ -lmysqlclient\ -lm /usr/lib/gcc-lib/i586-suse-linux/3.3.5/../../../../i586-suse-linux/bin/ld: cannot find -l/usr/include/mysql -lmysqlclient -lm collect2: ld returned 1 exit status make: *** [MySQL3] Fehler 1 hab grad gesehn das ich den fehler bekomm ... und das sagt mir jetzt was? Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 -l/usr/include/mysql In den Code-Tags sieht man es besser: Das ist ein kleines L, muss aber ein großes I sein: -I/usr/include/mysql Zitieren
carstenj Geschrieben 27. August 2007 Geschrieben 27. August 2007 Hi, ich dachte du hast schon Erfahrung mit C/C++? Dann müsstest du dir diese Frage doch selbst beantworten können. Dein Linker findet die entsprechende Library nicht (mysqlclient). Das liegt daran, dass sie entweder nicht installiert ist, oder der Pfad nicht bekannt, wovon ich eher ausgehe. Such die Lib mal und nimm den Pfad in deine Projekteinstellungen auf. Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 das hab ich doch getan ... ich kann net mehr als in die poperies -> c/c++ build -> gcc c linker -> settings -> libs den mist eintragen... und was genau hat programmieren mit nem dummen problem des eclipse zu tun? ich hab den depperten pfad angegeben und ich glaub ich hab das hier schon 10 mal oder so geschrieben wie kommt man da auf die antwort: trag die lib ein ... und das das nen l oder nen I is glaub ich net weil ich hab gar net die möglichkeit da was zu verändern... bzw ich glaubs schon aber dran ändern kann ich nix weil die option da nun mal als l oder L vorgegeben ist Zitieren
carstenj Geschrieben 27. August 2007 Geschrieben 27. August 2007 Hi, und was genau hat programmieren mit nem dummen problem des eclipse zu tun? Aufgrund dieser Frage... hab grad gesehn das ich den fehler bekomm ... und das sagt mir jetzt was? ...bin ich einfach mal davon ausgegangen, dass du mit der Fehlermeldung gar nichts anfangen kannst. Und das ist kein Eclipse Problem. Liegt denn die entsprechende Lib auch tatsächlich da in dem Pfad? Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 :(jo wie ich zum anfang des threads geschrieben hab hab ich ja mein eigenes makefile geschrieben (und auch gepostet) in dem der quellcode ohne probleme funktioniert... da ich da die selben pfade angegeben hab geh ich einfach mal stark davon aus das die dateien da noch liegen... also nehm ich schon an das es nen eclipse einstellungsproblem is... und ich kann schon was mit der fehlermeldung anfangen aber verstehn tu ich sie net weil ich meines erachtens alles richtig eingetragen hab und komplett verwundern tut mich halt der gcc linker der auf nen verzeichnis zugreifen will das nirgends angegeben is ... also nen MySQL3\Debug\MySQL3 gibt es einfach net... da ja aber in dem debug ordner alles von eclipse erstellt wurde kann ich auch net einfach nen ordner dazupacken ... oder ka... ich versteh es halt net mehr Zitieren
LordTerra Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 ok hat sich erledigt ... man kann beim gcc linker unter eclipse 2 pfade eintragen .... einmal mit kleinem l einmal mit großen L ich hatte halt beim kleinen und beim großen L den pfad eingetragen ... das war falsch... man darf nur beim großen L was eintragen dann gehts... und das soll einer wissen ... *ggg* naja ok thx Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.