Autor Thema: Nasm C Befehl einbinden  (Gelesen 4210 mal)

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« am: 21. October 2005, 17:29 »
Hallo, ich bin grad dabei das Tutorial von TeeJay zu lesen.
Ich habe jetzt alles gemacht wie er, aber wenn ich dann alles linke kommt die Meldung "kernel32.obj:kernel32.obj:(.text+0x1): undefined reference to `_main'" ich weis das es hier im Forum bereits einen Thread über dieses Problem gibt, aber in dem Thread steht keine Lösung die bei mir funktioniert. Also es liegt wohl daran das NASM oder der Linker ld _main nicht finden können.
In C ist aber int main. Ich habe auch schon int _main ausprobiert jedoch klappte es auch so nicht.

Die kernel32.asm sieht so aus:

[Bits 32]

extern _main
global start
start:
jmp _main
stop:
jmp stop

Könnt ihr mir sagen was das Problem ist?

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #1 am: 21. October 2005, 18:37 »
gib mal bei beiden sources (asm + c) die underscores weg und probieres dann nochmal.. unter welchem os kompilierst du?

lg, jim
\\o
o//
\o/

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. October 2005, 18:58 »
Die unterstriche hab ich entfernt hilft aber auch nix.
Os ist Windows XP Home.

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 21. October 2005, 19:49 »
Schau doch einfach in deiner Objektdatei nach wie deine "main"-Funktion heißt. Ansonsten kannst du deinem C Compiler meist auch sagen, wie Funktionen benannt werden sollen (über Kommandozeilenparameter).
Agieren statt Konsumieren!

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #4 am: 21. October 2005, 22:09 »
Zitat von: MrBigBrain
Die unterstriche hab ich entfernt hilft aber auch nix.
Os ist Windows XP Home.


gut, dann gibs jetzt mal bei einem der beiden sources dazu - wenn er dann immer noch meckert, dann gibs beim einen weg und beim anderen dazu .. hilft vielleicht ;)
\\o
o//
\o/

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 23. October 2005, 12:32 »
So ich hab jetzt geschafft das ganze zu linken, allerdings wenn ich mit rawrite die boot.bin auf die diskette schreibe und die kernel.bin nicht auf die Diskette kopiere kommt natürlich vom Bootloader "file not found" .
So soll es ja auch sein, aber wenn ich jetzt noch die Kernel.bin auf die Diskette kopiere, also einfach mit dem Explorer dann kommt vom Bootloader "loading" aber es wird keine Meldung vom Kernel angezeigt.

Gibts da eine Lösung? Denn ich hab ja alles wie in Teejays tutorial gemacht.

MFG MrBigBrain

Thoth

  • Beiträge: 62
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 23. October 2005, 12:54 »
Du hast es geschafft, das ganze zu linken? Wie? Ich hatte vor nem halben Jahr oder so das selbe Problem, hab aber keine Lösung gefunden und das ganze dann frustriert in irgendeine Ecke (der Festplatte) geschmissen.
Madness isn't a bug - it's a feature

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 23. October 2005, 12:56 »
Ich hatte mir die falsche DJGPP Version runtergeladen  :oops: . Auf www.osdever.net/ links dann auf downloads und dann bin ich auf DJGPP with installer without C++ support(6MB) gegangen. Nachdem ich dann den Kernel.c kompiliert hab konnte ich das ganze dann auch linken.

Thoth

  • Beiträge: 62
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 23. October 2005, 17:24 »
Hm, also ich hab das Compilerpaket von Bloodshed, das sollte doch eigentlich auch gehen, oder?
Aber ich probiers bei Gelegenheit mal mit dem was du gesagt hast. Dankeschön auf jeden Fall schonmal.

Edit: Öh, dieses Installationsprogramm will das ganze unbedingt in c:\djgpp\bin installieren. Meine Festplatte fängt aber erst bei d:\ an, was mach ich denn jetzt? Mit Kommandozeilenparametern? Und wie würden die lauten?
Madness isn't a bug - it's a feature

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 23. October 2005, 19:42 »
Da hab ich leider keine Ahnung wie das geht.

 

Einloggen