c++ mysql Bibliothek einbinden

R

rdg

???
Hi,

ich hab ein Problem auf die Funktionen von mysql zuzugreifen. Er erkennt <mysql> nicht sondern ich muß immer <mysql/mysql.h> einbinden und dennoch funktioniert es nicht. Habe im /urs/include u. /urs/lib nachgeschaut und beide sind da. Die devel.rpm habe ich auch installiert, sonst wären die beiden ja auch nicht da. Vielleicht kann mir ja bitte auch gleich dabei jemand mal den Unterschied zwischen <> u. "" erklären, dies würde mich auch mal interessieren.

dank und Gruß
Rdg
 
schau mal vl musst du die mysql bibliothek auch noch beim compilevorgang einbinden...
<>... wird im include vertzeichnis gesucht
""... wird im aktuellen sourcevertzeichnis gesucht

mfg hazelnoot
 
Ja ich hab auch schon über die Komandozeile
gcc -c -I/usr/include/mysql abc.cpp
gcc -o abc abc.cpp -L/usr/lib/mysql/ -lmysqlclient
eingegeben. Hat auch nicht funktioniert.
vl sagt mir leider nichts,oder was ich damit machen soll.
Beim Umgang mit dem Compiler habe ich noch Schwierigkeiten.
 
Was schmeisst denn der Compiler für eine Fehlermeldung aus?
 
Hi Theton,

in der Hoffnung dass du die Antwort nochmal liest.

In function `CMysql':
/home/rdg/daten/C++/Linux/arbeitszeiten/src/cmysql.cpp:33: undefined reference to `mysql_init'
/home/rdg/daten/C++/Linux/arbeitszeiten/src/cmysql.cpp:44: undefined reference to `mysql_real_connect'
/home/rdg/daten/C++/Linux/arbeitszeiten/src/cmysql.cpp:33: undefined reference to `mysql_init'
/home/rdg/daten/C++/Linux/arbeitszeiten/src/cmysql.cpp:44: undefined reference to `mysql_real_connect'
collect2: ld returned 1 exit status
gmake[2]: Leaving directory `/home/rdg/daten/C++/Linux/arbeitszeiten/debug/src'



#include "cmysql.h"
#include <mysql/mysql.h>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <string>

MYSQL *my;
my = mysql_init(NULL);

mysql_real_connect (
my, // Zeiger auf MYSQL-Handler
c_host, // Host-Name
c_user, // User-Name
c_password, // Passwort fr user_name
c_database, // Name der Datenbank
c_port, // Port (default=0)
c_socket, // Socket (default=NULL)
c_flag // Flags
);

Hoffe wie gesagt du liest die Antwort nochmal und danke für deine Hilfe!
Gruß
rdg
 
Versuchs mal mit
Code:
gcc -I/usr/include/mysql -L/usr/lib/mysql -lmysql -o outputdatei meinprogramm.c
Dateinamen und Pfade natürlich für dein System anpassen.
 
Hi theton,
cool hätte nicht gedacht, das du meinen Hilferuf noch erhörst!
hab darauf die Fehlermeldung
/usr/lib/gcc/i586-suse-linux/4.1.0/../../../../i586-suse-linux/bin/ld: cannot find -lmysql
collect2: ld gab 1 als Ende-Status zurück
erhalten, also glaube ich das irgendetwas nicht installiert ist, habe aber leider keine Idee was das sein könnte.

dank dir
rdg
 
Du musst die devel-Pakete von MySQL installieren. Je nach Distro heissen die leicht unterschiedlich, bei SuSE z.B. mysql-devel, bei Debian/Ubuntu sind das die libmysqlclient<version>-devel (Version ist hier je nach Distro und Repositories 12, 14 oder 15).
 
Ja das ist es ja, ich habe es installiert und es funktioniert nicht. Jetzt versuch ich ein paar Pakete von gcc nachzuinstallieren und hoffe so das es funktioniert. Zu mysql habe ich keine Pakete mehr gefunden welche mir weiterhelfen würden.
 
/usr/lib/mysql

Ich verstehe auch nicht, warum ich immer <mysql/mysql.h> eingeben muss, obwohl Verzeichnis mysql ja da ist, ich glaube hier liegt der Fehler den ich nicht finde.
 
Zuletzt bearbeitet:
Standardmässig sucht der Compiler nach Header-Dateien in /include, /usr/include und /usr/local/include. Sind die Header dort in einem Unterverzeichnis, muss der relative Pfad beim define verwendet werden
Code:
#include <unterverzeichnis-von-include/headerdatei.h>
Liegen deine Header also in /usr/include/mysql musst du das auch so angeben
Code:
#include <mysql/mysql.h>
Deswegen denke ich nicht, dass hier dein Problem liegt.
Um den Linker korrekt einzurichten, kannst du einfach mal folgendes machen:
1. Überprüfe ob in /usr/lib/mysql eine Datei libmysqlclient.so existiert.
2. Wenn sie dort liegt, trage in eine extra Zeile der /etc/ld.so.conf den Pfad ein:
Code:
/usr/lib/mysql
3. Lass einmal ldconfig durchlaufen.
4. Wenn ldconfig ohne eine Meldung beendet wird, versuche es nochmal mit dem kompilieren.
 
Wie sieht der Inhalt von /usr/include/mysql und /usr/lib/mysql bei dir aus?
 
usr/lib/mysql/
libdbug.a
libheap.a
libmyisam.a
libmyisammrg.a
libmysqlclient.a
libmysqlclient.la
libmysqlclient.so
libmysqlclient.so.15
libmysqlclient.so.15.0.0
libmysqlclient_r.a
libmysqlclient_r.la
libmysqlclient_r.so
libmysqlclient_r.so.15
libmysqlclient_r.so.15.0.0
libmystrings.a
libmysys.a
libvio.a
mysqld.sym

usr/include/mysql
errmsg.h
keycache.h
m_ctype.h
m_string.h
my_alloc.h
my_config.h
my_dbug.h
my_dir.h
my_getopt.h
my_global.h
my_list.h
my_net.h
my_no_pthread.h
my_pthread.h
my_semaphore.h
my_sys.h
my_xml.h
mysql.h
mysql_com.h
mysql_embed.h
mysql_time.h
mysql_version.h
mysqld_ername.h
mysqld_error.h
raid.h
sql_common.h
sql_state.h
sslopt-case.h
sslopt-longopts.h
sslopt-vars.h
typelib.h
 
*grmpf* Ich Idiot. Du benutzt ja nur die Client-Funktionen und nicht die Server-Funktionen. In diesem Fall musst du -lmysqlclient anstelle von -lmysql nutzen.
 
Leider bekomme ich nur diese Antwort:

linux:/home/rdg/daten/C++/Linux/arbeitszeiten/src # gcc -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient -o arbeitszeiten arbeitszeiten.cpp

/tmp/cc9HuD5x.o: In function `__static_initialization_and_destruction_0(int, int)':
arbeitszeiten.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/cc9HuD5x.o: In function `__tcf_0':
arbeitszeiten.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc9HuD5x.o: In function `main':
arbeitszeiten.cpp:(.text+0xc3): undefined reference to `CMysql::CMysql(char*, char*, char*, char*, int, char*, int)'
arbeitszeiten.cpp:(.text+0xd9): undefined reference to `std::cout'
arbeitszeiten.cpp:(.text+0xde): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
arbeitszeiten.cpp:(.text+0xe6): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
arbeitszeiten.cpp:(.text+0xee): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
arbeitszeiten.cpp:(.text+0xfc): undefined reference to `std::cout'
arbeitszeiten.cpp:(.text+0x101): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
arbeitszeiten.cpp:(.text+0x109): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
arbeitszeiten.cpp:(.text+0x111): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
arbeitszeiten.cpp:(.text+0x121): undefined reference to `CMysql::~CMysql()'
arbeitszeiten.cpp:(.text+0x137): undefined reference to `CMysql::~CMysql()'
/tmp/cc9HuD5x.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

danke für dein durchhalten!!!
rdg
 
Zuletzt bearbeitet:
Tja, das ist ein Problem von CMySQL, der C++-Klasse. Ich programmiere vorranging in C. C++ nutze ich nur dann, wenn ich viel mit String-Handling zu tun habe, was bei meinen MySQL-bezogenen Programmen selten der Fall ist. Evtl. findet sich hier ja jemand, der sich mit den C++-Klassen besser auskennt.
Evtl. liegt dein Problem aber auch darin, dass er den std-Namespace nicht richtig auflösen kann. Hast du die notwendigen devel-Pakete für C++ installiert (libstdc++ u.ä.)?
 
Hast du (theton) schon mal versucht deinen quelltext mit g++ zu bauen?

so sieht bei mir das makefile für ne mysql-c /server/ c++ gschichte aus

Code:
CPP=g++
CPPFLAGS=-Wall -march=athlon-xp -Wno-deprecated-declarations -I/usr/include/mysql
LIBS=-lmysqlclient   

OBJECTS=kndstamm.o main.o 

main: ${OBJECTS}
	${CPP} -o $@ ${OBJECTS} ${CPPFLAGS} ${LIBS}
	
	rm -f *.o

clean:
	rm -f main

und natürlich using namespace std; nicht vergessen

servus
 
Also ich bin jetzt ein wenig durchgeknallt und habe allse was ich zu c++ finden konnte installiert. waren ungefähr 250 MB, na ja ich habs ja. Dennoch funktioniert es nicht. Was heidler meint versteh ich leider nicht. Ich glaube wir sollten dies erst einmal lassen, es ist zwar sehr wichtig für mich aber ich kann momentan einfach nicht mehr. Trotzdem vielen dank für deine Hilfe theton!
Ich glaub ich dreh durch!!! Schnauze voll!!! Nie wieder Programmieren!!! ....
 
Zuletzt bearbeitet:

Ähnliche Themen

Heimserver Konfiguration für Ubuntu Server?!

Problem mit Apache2 + MySQL Server

Xubuntu - AVR32-linux crosscompile sqlite

Welches Linux?

mythtv und mysql

Zurück
Oben