我有一个像这样的文件:
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;
}