Не могу использовать глобальные переменные с gcc - PullRequest
0 голосов
/ 03 июня 2019

У меня есть файл, подобный следующему:

char* vidmem = (char*)0xb8000;

int main()
{
    vidmem[0] = 'x';
    vidmem[1] = 0x0f;
}

Но когда я компилирую его с помощью gcc, он ведет себя так, будто vidmem даже не существует.У меня есть эта проблема со всей переменной, объявленной вне функции.Maby этот может быть объявлен внутри main, но другие переменные в других файлах, связанных с этим не могут быть.Вот как я это скомпилирую:

gcc -c main.c -o main.obj -ffreestanding -fno-exceptions -m64

И вот как я собираю все файлы:

gcc -m64 -Wl,--build-id=none -static -fno-asynchronous-unwind-tables -nostdlib -nodefaultlibs -lgcc main.obj [..] -T linker.ld -o out.bin

Почему это происходит?И как я могу решить это?

РЕДАКТИРОВАТЬ:

Я делаю ОС, и это код из ядра C.Я использую Linux-подсистему для Windows для компиляции и QEMU для тестирования

Вот ссылка на весь код: http://www.mediafire.com/file/7x21lh4dnc93dz9/OS.7z/file

1 Ответ

1 голос
/ 03 июня 2019

Вы можете объявить глобальные переменные, но вы должны инициализировать их в main следующим образом: char * vidmem;

char* vidmem;

int main()
{
    vidmem = (char*)0xb8000;

    vidmem[0] = 'x';
    vidmem[1] = 0x0f;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...