Lowlevel
OffZone => Offtopic => Thema gestartet von: YoshiX650 am 13. December 2013, 08:47
-
Guten Morgen,
ich lese grade von osdever.net eine Anleitung zum erstellen eines mini-mini-mini-... Betriebssystem.
Leider kriege ich eine Fehlermeldung wenn ich das ganze compilen will.
Fehler:http://goo.gl/dZggMt (http://goo.gl/dZggMt)
Was kann ich tuen?
LG
PS: Mein Compiler ist GCC und mein System ist ein Mac
-
Hi,
er will dir sagen, dass du ' ' (mit Leerzeichen) statt '' schreiben sollst. Oder gleich videomem[i] = 0x0700;, da sowohl Leerzeichen wie auch '\0' nicht sichtbar sind.
-
Okay,
kann es sein das, das Tutorial etwas kaputt ist?
Hab beim compilen des Kernels gleich wieder ein Fehler.
-
Das Tutorial ist nicht zum abschreiben gedacht (man sollte eher sagen nicht zum kopieren). Ein wenig Eigenleistung ist schon erforderlich, aber wirklich schwerwiegende Fehler hab ich bis jetzt nicht entdeckt. Was nicht heißen soll dass es keine geben könnte.
Hab beim compilen des Kernels gleich wieder ein Fehler.
Wenn du uns verrätst welchen Fehler du hast findet sich bestimmt einer der ihn ausbessert. :-)
-
Der Fehler: http://goo.gl/7h4DQV
Ich schreibe übrings alles ab.
-
Du sollst das Tutorial weder kopieren noch unverstanden abschreiben. :-)
Es ist uebrigens besser, statt einem Foto der Fehlermeldung einfach den Text der Fehlermeldung hier reinzukopieren (z.B. in Code-Tags) und am besten noch gleich den betreffenden Code dazu.
Beide Compilerausgaben sind keine Fehler, sondern nur Warnungen. Im zweiten Fall deklarierst du eine Funktion mit einem Rueckgabewert, hast aber kein return in der Funktion drin - im ersten Fall handelt es sich um den Hinweis, dass ein Stringliteral in C++ nicht mehr automatisch in einen normalen C-String umgewandelt werden sollte. Ueberhaupt ist C++ im Kernel immer so eine Sache: Wenige Dinge funktionieren, viele Features brauchen aber eine Laufzeitunterstuetzung (z.B. funktionierende Speicherverwaltung, Multithreading), und manche Eigenschaften sind in einem Kernel nicht wirklich nutzbar.
Wenn du dich mit den Details nicht auskennst, ist es vermutlich erstmal einfacher, bei C zu bleiben.
Gruss,
Svenska
-
Die Bezeichnung Stringliteral ist hier einwenig irreführend. Mein g++ spricht von string constant. Das Problem ist das ein "String wie dieser" konstant ist, und der korrekte Type const char* ist.
Folgender code segfaultet z.B. weil "abc" in einer read-only section liegt. (g++ meckert, gcc nicht)
int main() {
char* a = "abc"
a[0] = 'b';
return 0;
}
-
Das würde ich aber unter Compiler-Fehler verbuchen, da du in deinem Code ja extra NUR char* als Typ angegeben hat und der Compiler merken sollte dass du deinen String beschreibst (welcher ja mit eignedlich nichts anderes als ein array ist)
-
Überrascht mich auch etwas, aber das knallt tatsächlich. :?
Ersetzt man *a durch a[], funktioniert es.
Schreibt man const davor, gibt es in beiden Fällen einen Compilerfehler (logisch).
-
char[] ist ja auch was anders als char*. Ersteres erzeugt ein neues Array, das nur mit dem Literal initialisiert wird, während letzteres ein Pointer direkt auf das Literal ist.
Und zu Stringliteralen steht in C11, 6.4.5, Absatz 7:
It is unspecified whether these arrays are distinct provided their elements have the
appropriate values. If the program attempts to modify such an array, the behavior is
undefined.