Ich habe das Problem, dass ich einige Methoden eines Headers einfach nicht aufrufen kann. 
Zb. in meiner "AsmAcess.h":
Wenn ich das Ganze dann mit folgendem Code kompilieren will:
Ich bin absolut ratlos, was das Problem auslöst.
Eigentlich müsste der Präprozessor "#include "kernel\asmaccess.h"" mit dem Code in der Datei ersetzen und abschliessend das Ganze inlinen.
Doch weshalb tut er das nicht?
Ich hoffe ihr könnt mir helfen.

Zb. in meiner "AsmAcess.h":
Code: [Auswählen]
#ifndef ASMACCESS
#define ASMACCESS
#include <stdint.h>
inline uint8_t inb(uint16_t Port)
{
unsigned char Data = 0;
asm volatile ("inb %1, %0" : : "a" (Data), "Nd" (Port));
return Data;
}
inline void outb(uint16_t Port, uint8_t Data)
{
asm volatile ("outb %0, %1" : : "a" (Data), "Nd" (Port));
}
inline void halt()
{
StopPoint:
asm volatile ("cli");
asm volatile ("hlt");
goto StopPoint;
}
#endifDiese Datei binde ich dann zb. in meinem Kernel ein:Code: [Auswählen]
#include "kernel\console.h"
#include "kernel\asmaccess.h"
void main()
{
Console_ClearScreen();
Console_WriteLine("Hallo!");
Console_WriteLine("Ich heiße Compi!");
Console_WriteLine("Ich bin ein Computer");
Console_WriteLine("und lasse hier diesen sinnfreien Text anzeigen.");
halt();
}Wenn ich das Ganze dann mit folgendem Code kompilieren will:
Code: [Auswählen]
del obj\*.o
SET C_COMPILE=i586-elf-gcc -m32 -ffreestanding -Wall -nostdinc -std=gnu99 -I stdlib
SET ASM_COMPILE=nasm -f elf
%ASM_COMPILE% -o obj\start_S.o start.S
%C_COMPILE% -o obj\kernel_c.o -c kernel.c
%C_COMPILE% -o obj\beep_c.o -c kernel\beep.c
%C_COMPILE% -o obj\console_c.o -c kernel\console.c
%C_COMPILE% -o obj\rand_c.o -c stdlib\rand.c
i586-elf-ld -T linkconf.ld -o obj\kernel.bin obj\*.o -Ttext=0x100000
copy obj\kernel.bin cd\kernel.bin
mkisofs -R -J -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o cdrom.iso cd/Kommt beim Linken immer diese Fehlermeldung:Code: [Auswählen]
obj\kernel.o: In Funktion "[i]main[/i]":
kernel.c(.text+0x57): undefined reference to "halt"Ich bin absolut ratlos, was das Problem auslöst.
Eigentlich müsste der Präprozessor "#include "kernel\asmaccess.h"" mit dem Code in der Datei ersetzen und abschliessend das Ganze inlinen.
Doch weshalb tut er das nicht?

Ich hoffe ihr könnt mir helfen.


Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

)

