In einem Versuch, die Interrupt Descriptor Table die Daten zu erhalten, mit dem folgenden Code:MinGW GCC Inline-Montage mit IDT-Struktur geladen werden kann
/* SIDT returns IDT in following format */
#pragma pack(1)
typedef struct
{
unsigned short IDTLimit;
unsigned short LowIDTBase;
unsigned short HighIDTBase
} s_idt_info;
#pragma pack()
.
.
.
s_idt_info idt_info; // returned by sidt
s_idt_entry *idt_entries; // obtained from idt_info
unsigned long count;
// load idt_info
__asm ("sidt idt_info");
ich die folgende Fehlermeldung erhalten:
||=== Build: Release in driver2 (compiler: gnu_64) ===|
obj\Release\driver.o:driver.c|| undefined reference to `idt_info'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Mit MinGW -64bit's g ++ Compiler
GCC ist kein "Inline Assembler" und das ist nicht mit Mingw! – Olaf
Mögliches Duplikat von [Was ist ein nicht definierter Verweis/ein ungelöster externer Symbolfehler und wie behebe ich ihn?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-) symbol-error-and-how-do-i-fix) – Olaf
Olaf: Ich denke nicht, dass dies ein Duplikat dieser Frage ist, da dies das Problem der GCC-Basis-Inline-Assemblierung ist, die nur globale Variablen sichtbar macht. In diesem Fall ist "idt_info" wahrscheinlich lokal für die Funktion, in der sich der Code befand (das ist ein wenig raten, da die Funktion nicht im Code angezeigt wird). –