Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: bitmaster am 31. December 2008, 11:27

Titel: error: deprecated conversion from string constant to ‘char*’
Beitrag von: bitmaster am 31. December 2008, 11:27
Hi,

ich bastel gerade an einen kleinen C-Kernel. Na ja, eigentlich bin ich nur am kopieren und einfügen. :-P Aber irgendwie lassen sich eure C-Kernel nicht kompilieren. Über diese Zeile meckert mein gcc:

char *hello = "Hello World";

Und zwar sagt er:

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

Scheint irgendwas zu sein, was man früher so gemacht hat aber jetzt nicht mehr so macht (wenn ich noch ein bisschen Englisch kann ^^). Aber was genau muss man da ändern? Wie gesagt, ich bin noch totaler C-Noob. Von daher wäre ich euch dankbar wenn ihr mir helfen könntet. thx

bitmaster
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: kevin am 31. December 2008, 11:35
Huch, ist dir dein Kernel zu schnell geworden oder wieso willst du C benutzen? :-P

Mach mal ein const char* hello = "Hello World"; draus, das sollte gehen.
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: bluecode am 31. December 2008, 11:58
Benutzt du g++ zum kompilieren eines C-Kernels (oder die Dateiendung *.cpp oder ähnlichens)? Afaik warnt doch da nur der C++ Compiler vor (zumindest konnte ich das nicht mit gcc 4.3.2 reproduzieren)? Oder nutzt du spezielle Flags dafür?
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: bitmaster am 31. December 2008, 12:51
Hi,

thx jetzt geht es. vielen dank.

@bluecode: Ich habe es mit gcc und g++ versucht. Aber beides sind x86-64 Versionen. Mit -m32 bringe ich sie dann dazu eine elf32 zu erstellen. Und ld muss ich auch sagen, dass er i386 nehmen soll. Aber damit klappt es. Wenn ich g++ -v eingebe sagt er mir gcc version 4.3.1. Also nein, ich verwende nicht 4.3.2 sondern 4.3.1. KA wieso deiner kein error ausgibt. Aber wie gesagt meiner ist x86-64 (kA ob das was damit zu tun haben kann).

bitmaster
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: MNemo am 31. December 2008, 14:14
Aber wie gesagt meiner ist x86-64 (kA ob das was damit zu tun haben kann).
ne, das hat damit nix zu tun. Ich nutze auch gcc/g++ als 64bit Version und kann den fehler auch nicht reproduzieren.
außer mit: 'g++ foo.c', 'gcc -x c++ foo.c', 'gcc foo.cpp', aber dann ist es ja kein C mehr, sondern C++.
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: kevin am 31. December 2008, 14:15
Soweit ich weiß, kann man die entsprechende Warnung auch mit C anschalten. Aber daß es Standard ist, wäre mir auch neu.
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: bitmaster am 31. December 2008, 16:24
So mache ich das:

Zitat
g++ -ffreestanding -o kernel_cpp.o -c kernel.cpp -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -m32

Und so zeigte auch gcc den Fehler an:

Zitat
gcc -ffreestanding -o kernel_cpp.o -c kernel.cpp -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -m32

bitmaster
Titel: Re: error: deprecated conversion from string constant to ‘char*’
Beitrag von: bluecode am 31. December 2008, 16:36
gcc -ffreestanding -o kernel_cpp.o -c kernel.cpp -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -m32

Kein Wunder, du verwendest den C++ Compiler. Du solltest wenn du wirklich nur C Code hast auch den C Compiler verwenden, d.h. deine Quellcodedateien *.c nennen, denn gcc ruft abhängig von der Dateinamenserweiterung den eigentlichen Compiler auf. In diesem Fall ist das wegen dem *.cpp eben der C++ Compiler.