Zum Inhalt springen

warning: deprecated conversion from string constant to ‘char*’

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 “ sonst kennt er „exit“ nicht.

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!

Schlagwörter:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert