Autor Thema: error: deprecated conversion from string constant to ‘char*’  (Gelesen 6053 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
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
In the Future everyone will need OS-64!!!

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 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.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 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?
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #3 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
In the Future everyone will need OS-64!!!

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #4 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++.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 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.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #6 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
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen