Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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
-
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.
-
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?
-
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
-
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++.
-
Soweit ich weiß, kann man die entsprechende Warnung auch mit C anschalten. Aber daß es Standard ist, wäre mir auch neu.
-
So mache ich das:
g++ -ffreestanding -o kernel_cpp.o -c kernel.cpp -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -m32
Und so zeigte auch gcc den Fehler an:
gcc -ffreestanding -o kernel_cpp.o -c kernel.cpp -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -m32
bitmaster
-
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.