我有一个像这样的文件:

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内核的代码。我正在使用用于Windows的linux子系统进行编译以及使用qemu进行测试

这是所有代码的链接:http://www.mediafire.com/file/7x21lh4dnc93dz9/OS.7z/file

最佳答案

您可以声明全局变量,但必须像这样在main内部进行初始化:
char * vidmem;

char* vidmem;

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

    vidmem[0] = 'x';
    vidmem[1] = 0x0f;
}

10-06 00:39