Hi, ich tippsle gerade an einem kleinen heimprojekt. Es geht um ein Betriebssystem auf der PC hardware. Dabei gibt es zwei make targets. Eines für ELF und das Andere für den Unittest/Code Coverage PE win32. Aktuell läuft das Unittest Target ohne Startupcode, und beginnt direkt in der int main(void) funktion. Das würde ich jetzt gerne ändern. Wie muss denn das Linkerscript für eine Win32 Consoleanwendung ausschauen ?? Wäre schön wenn da jemand gute Beispiele hätte. Grüße Nasenbaer
Alexander Kiebler schrieb: > Wie muss denn das Linkerscript für eine Win32 Consoleanwendung > ausschauen ?? War denn bei deinem Compiler keins dabei?
Nasen Baer schrieb: > Es geht um ein Betriebssystem auf der PC hardware. > > Dabei gibt es zwei make targets. > Eines für ELF und das Andere für den Unittest/Code Coverage PE win32. Was denn jetzt, eigenes Betriebssystem oder Win32?!
Hi Rolf,
Ich bin mit dem Compiler gerade etwas in der Schwebe.
Ich hab mir einen Crosscompiler als binärpakte heruntergeladen,
bin aber gerade auf dem Weg mir einen eigenen ELF compiler für
den PC zu bauen. Momentan arbeite ich aber noch mit dem Gezogenen.
Also das exe target ist minGw
Das andere ist der ELF crosscompiler.
Mein LInkerscript für das Unittest Target habe ich jetzt vereinfacht
durch:
ENTRY(_start)
Mein Startup code:
// Declare functions which are in other translation units
.extern init
// Text Section
.section .text
.global _start
_start:
// call c_tors
call _v_iniCtors
// C-Code aufrufen
call _init
call _main
_stop:
cli
hlt
Leider schein da irgendwas mit dem namemangling nicht zu stimmen.
Er Meckert... "undefined reference to main"
nm main.o:
00000000 b .bss
00000000 d .data
00000000 r .eh_frame
00000000 r .rdata$zzz
00000000 t .text
00000000 T __Z5_mainv
nm start.o:
00000000 b .bss
00000000 d .data
00000000 t .text
U _init
U _main
00000000 T _start
0000000f t _stop
U _v_iniCtors
Na ja wenn ich linker wäre würde ich das auch sagen =)....
Hi Dr. Sommer, es gibt ein Target welches mit dem Crosscompiler gebaut wird. Das wird dann von GRUB direkt geladen und ich muss neustarten. Dann gibt es ein zweites makefile Target. Dort linke ich gegen gcov und ev. ne CPPTest oder so. Das wird ein PE Format und läuft als Win32 Anwendung auf Windows. Dort werde ich mit Tests dagegenprogrammieren. Der embedded Teil läuft. Momentan sind es wohl zwei Probleme. Das eine ist das das Namemangling nicht stimmt. Ev def file ?? Das zweite ist (vor zwei Tagen) habe ich für eine normale Win32 Anwendung ein Linkerscript zum bauen benutzt. Compilieren und Linken war gut(Fehlerlos). Aber beim Ausführen auf Windows habe ich "Keine valide Win32 Anwendung" zurückbekommen. .... Und aus dem Grund habe ich hier ins Forum Geschrieben. Also das zweite Problem interessiert mich.
Ob du's glaubst oder nicht, es gibt fertige Compiler für Win32. Installier dir so einen und compiliere damit einfach direkt für Windows. z.B. MSVC, mingw32, mingw64, ... Da brauchst du gar nichts mit linkerscripten rumzufummeln.
Okay, also jetzt bin ich beim besagten Problem. ich habe einfach call __Z5_mainv anstatt call _main verwendet. Wenn ich das executable jetzt aufrufe, dann bekomme ich: *.exe ist keine zulässige Win32-Anwendung...
Hi Dr. Sommer klar gibt es das. Aber ich habe jetzt eben bock drauf. Ich freu mich über hilfe,... aber was ich zu hause mache... bitte mein bier sei lassen =).... Nichts für ungut...
Nasen Baer schrieb: > klar gibt es das. Aber ich habe jetzt eben bock drauf. Dann bist du selber schuld :P Schau dir die produzierte .exe mal im Hexeditor an und vergleiche mit der Spezifikation für das PE-Format...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.