Ich bin gerade dabei mich ein wenig in C/C++ einzuarbeiten, für das eine oder andere Tool ist’s dann doch ganz praktisch wenn man’s in C/C++ schreiben kann. Und auch bei Problemen mit dem Compilieren von Programmen soll es helfen wenn man weiß was die Fehlermeldungen bedeuten 🙂
Eine einfache und gute Kurzanleitung wie man mit C auf das API von Mysql zugreifen kann habe ich hier gefunden.
Allerdings hat das ganze bei mir erst mal ein paar Fehlermeldungen beim Compilieren geliefert!
gcc -o mysql_test $(mysql_config –cflags) mysql_test.cpp $(mysql_config –libs)
mysql_test.cpp: In function ‘int main()’:
mysql_test.cpp:10: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:11: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:12: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:13: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:21: error: ‘exit’ was not declared in this scope
mysql_test.cpp:27: error: ‘exit’ was not declared in this scope
Nach ein wenig Suche bin ich auf die Lösung gestoßen, der gcc ab 4.3 braucht den Include „#include
Anschließend sieht die Fehlermeldung wie folgt aus:
mysql_test.cpp: In function ‘int main()’:
mysql_test.cpp:11: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:12: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:13: warning: deprecated conversion from string constant to ‘char*’
mysql_test.cpp:14: warning: deprecated conversion from string constant to ‘char*’
/tmp/ccwZLvOo.o:(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0′
Also auch noch nicht alles weg, das „warning“ ist recht schnell beseitig – einfach die vier zeilen mit ‚char *server = „localhost“;‘ in ‚const char *server = „localhost“;‘ umschreiben, also ein „const“ davor setzen und schon bleibt nur noch die letzte Meldung.
Die wiederum kriegt man weg in dem man beim gcc noch folgendes mit angibt „-lstdc++“ und schon klappt der Compile wie gewünscht und auch das Programm liefert ein passendes Ergebnis!
Hier noch einmal das komplette Listing:
/* Simple C program that connects to MySQL Database server*/
#include <cstdlib>
#include <mysql.h>
#include <stdio.h>main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;const char *server = „localhost“;
const char *user = „root“;
const char *password = „password“; /* set me first */
const char *database = „mysql“;conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, „%sn“, mysql_error(conn));
exit(1);
}/* send SQL query */
if (mysql_query(conn, „show tables“)) {
fprintf(stderr, „%sn“, mysql_error(conn));
exit(1);
}res = mysql_use_result(conn);
/* output table name */
printf(„MySQL Tables in mysql database:n“);
while ((row = mysql_fetch_row(res)) != NULL)
printf(„%s n“, row[0]);/* close connection */
mysql_free_result(res);
mysql_close(conn);
}
Und compiliert wird mit:
gcc -lstdc++ -o mysql_test $(mysql_config –cflags) mysql_test.cpp $(mysql_config –libs)
Vorausgesetzt das Paket „libmysqlclient15-dev“ ist installiert, sonst funktioniert das mysql_config Script nicht!