Categories: Linux

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!

Manfred

Recent Posts

Proxmox VE 9 – Netzwerk Interface Zuordnung ändern

Ich bin es gewohnt unter /etc/systemd/network/10-nic0.link die Zurodnung des Netzwerk Interfaces zu seinem Namen "nic0"…

1 Monat ago

Nextcloud – PHP Imagick Fehlermeldung

Nextcloud liefert in den Administrationseinstellungen gelegentlich diese Fehlermeldung: PHP Imagick-Modul Das PHP-Modul "imagick" in dieser…

2 Monaten ago

Postsible: Warum ich meinen eigenen Mail-Server gebaut habe

Ein Mail-Server-Setup das nicht nervt — weil alle anderen Lösungen nervig waren "Wie schwer kann…

6 Monaten ago

M$ & Office 365 haben mir gerade wieder Lebenszeit gekostet – Error 0-2048 (0)

<Sarkasmus>Die besten Softwareentwickler arbeiten bei Microsoft!</Sarkasmus> Als Endanwender würde ich mir Fehlermeldungen erwarten die aussagekräftig…

7 Monaten ago

ESET ohne Web Access Protection Modul installieren

Auf einem Linux Server braucht man eventuell das WAP Modul von ESET nicht, der Weg…

10 Monaten ago

Veeam Agent for Linux ignoriert .vdi Files

Auf einem Linux System mit installiertem Veeam Agent wird auf File-Level Basis eine Sicherung des…

1 Jahr ago