Autor Thema: LowLevel-Coding mit Code::Blocks  (Gelesen 2892 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« am: 10. December 2008, 21:40 »
Nabend zusammen,

benutzt einer von euch auch die o.g. IDE?
Mein Problem ist, dass der Linker meckert, dass er __init_array_end nicht findet.
Wenn ich die object-files von Hand linke, dann geht es.
Dann habe ich nur das Problem, dass der Qemu sagt, dass es sich bei dem Programm nicht um eine executable handelt.
Woran liegt das?
Kann es sein, dass ich den Compiler falsch eingestellt habe in der IDE?
Wenn ja, was und wie muss ich denn alles einstellen?

Danke.

Gruß
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 10. December 2008, 23:09 »
Klingt irgendwie nach Vermischung mit der Standardbibliothek von deinem Hostsystem. Sicher, daß deine IDE mit den richtigen Parametern kompiliert/linkt?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 10. December 2008, 23:19 »
Beim Compiler habe ich -nostdinc angegeben.
Ich habe in der Zwischenzeit veruscht mir ein eigenes Makefile zu bauen.
Leider bekomme ich da den Fehler:
Makefile:19: *** missing separator.  Schluss.
Woran liegt das?
Habe leider noch nicht viel Erfahrungen mit makefiles.

Mein Makefile sieht so aus:
# the compiler-paths and the flags for the compiler
CC = /usr/bin/gcc
CFLAGS = -Wall -O3 -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -march=i386 -I./kernel/include -c
ASM = /usr/bin/nasm
ASMFLAGS = -felf
# the path to the linker and his flags
LD = /usr/bin/ld
LDFLAGS = -T linker.ld

#the paths to the source files
CSRC = boot_kernel.c boot_system.c kernel/gdt.c kernel/kernel32.c kernel/display/display.c kernel/interrupt/exception.c kernel/interrupt/idt.c kernel/interrupt/irq.c kernel/interrupt/pic.c kernel/interrupt/pit.c kernel/memory/physmem.c
ASMSRC = boot_system.asm kernel/interrupt/exception.asm kernel/interrupt/irq.asm

#the paths to the object files
COBJ = obj/boot_kernel.c.o obj/boot_system.c.o obj/gdt.c.o obj/kernel32.c.o obj/display.c.o obj/exception.c.o obj/idt.c.o obj/irq.c.o obj/pic.c.o obj/pit.c.o obj/physmem.c.o
ASMOBJ = obj/boot_system.asm.o obj/exception.asm.o obj/irq.asm.o

compileASM: $(ASMOBJ) $(COBJ)
    $(ASM) $(ASMFLAGS) -o $(ASMOBJ) $(ASMSRC)
    $(CC) $(CFLAGS) -o $(COBJ) $(CSRC)
    $(LD) $(LDFLAGS) -o bin/kernel.bin $(COBJ) $(ASMOBJ)

Danke.

Gruß
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 11. December 2008, 00:35 »
Eventuell ein Problem mit dem Whitespace? Die Befehle müssen mit Tabs eingerückt sein, Leerzeichen funktionieren nicht.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 11. December 2008, 16:53 »
Habe nun leider ein neues Problem mit dem Makefile.
Beim Kompilieren wird mir gesagt, dass er die COBJ-Files nicht findet. Was ja auch richtig ist.
Woran liegt das?
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen