Zum Inhalt springen

C / MySql


LordTerra

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen


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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

:(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 :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...