首页 > 解决方案 > gcc 不能使用全局变量

问题描述

我有一个这样的文件:

char* vidmem = (char*)0xb8000;

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

但是当我用 gcc 编译它时,它的行为就像 vidmem 甚至不存在一样。我在函数之外声明的所有变量都有这个问题。也许这个可以在 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 子系统 for windows 来编译它和 qemu 进行测试

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

标签: cgcc

解决方案


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

char* vidmem;

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

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

推荐阅读