C-Funktion von assembler aus aufrufen.
-
Hi,
ich versucher gerade eine C-Funktion von assembler aufzurufen.
ich arbeite von linux - gcc aus und
von Windows MINGW auf diesem ProjektLeider funktioniert das Folgende nur unter linux:
start.S:
// Init ist eine Funktion aus init.c .extern init .. _start: // Stack initialisieren mov $kernel_stack, %esp // C-Code aufrufen call init
init.c:
#ifdef __cplusplus extern "C" { #endif void init(void) { .....
kernel.ld:
/* * Der Multiboot-Header muss zuerst kommen (in den ersten 8 kB). * Die Standardsektionen einfach hintereinander weg einbinden. */ .text : { *(multiboot) *(.text) *(.gnu.linkonce.t*) }
Makefile:
ASFLAGS = -m32 CFLAGS = -m32 -Wall -g -fno-stack-protector -nostdinc ifeq ($(OS),Windows_NT) #Windows stuff LDFLAGS = -mi386pe -Tkernel.ld else #Linux stuff LDFLAGS = -melf_i386 -Tkernel.ld endif
Ich bekomme beim linken mit ld:
start.o:fake:(.text+0x12): undefined reference to 'init'
Erstaunlicher Weise aber nicht immer.
Sonder an einem Tag gehts, an nem anderen nicht.
ich mache immer ein make clean, bevorich ein make mache....Würde mich über HIlfe sehr freuen.
Habe versucht es kurz zu halen, damit man nicht zu viel lesen muss
Gruss Alex
-
MINGW braucht _init und gcc nicht ??
Ja das ist es.Gibt es eine möglichkeit das zuumgehen ??
Also mit einem#ifdef MINGW ...
oder so ??
-
AlexanderKiebler schrieb:
#ifdef MINGW ...
oder so ??
Zumindest gibt es __MINGW32__
-
Kann schon sein das MingW ne andere Konvention folgt wegen den Unterstrichen. Das gewünschte Verhalten lässt sich aber auch mit Parameter erzwingen: -fleading-underscore bzw. -fno-leading-underscore.
-
Hi, Tobi der zweite
Hi, MinGwdanke für die Schnellen Antworten.
Klasse das man das Verhalten über einen compilerschalter definieren kann:
-fleading-underscore bzw. -fno-leading-underscore.Gruß und Dank,
Alex