В попытке получить данные в таблицы дескрипторов прерываний, используя следующий код:Использование GCC ассемблерные MinGW, чтобы загрузить структуру IDT не удается
/* 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");
Я получаю следующее сообщение об ошибке:
||=== 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)) ===|
Использование MinGW -64bit's g ++ компилятор
gcc не является «встроенным ассемблером», и это не связано с mingw! – Olaf
Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) – Olaf
Olaf: Я не думаю, что это дубликат этого вопроса, так как это действительно проблема базовой встроенной сборки GCC, которая имеет только видимость глобальных переменных. В этом случае 'idt_info', скорее всего, является локальным для функции, в которой находился код (это немного предположение, поскольку функция не показана в коде) –