c - 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
解决方案
您可以声明全局变量,但您必须像这样在 main 内部初始化: char* vidmem;
char* vidmem;
int main()
{
vidmem = (char*)0xb8000;
vidmem[0] = 'x';
vidmem[1] = 0x0f;
}
推荐阅读
- octave - ex3 coursera机器学习中的displaydata函数
- database - 连接文本文件,用新行分隔它们
- c# - xamarin 页面顶部出现意外蓝线
- c# - 简化 DDD 实体类状态转换
- c# - DataContractJsonSerializer 反序列化问题
- keras - T.alloc 是什么意思
- python-3.x - TypeError:“list_iterator”对象不是异步可迭代的
- ios - 将标签添加到滚动视图后什么也看不到
- reactjs - 无法在 React 中使用 App.js 加载 Jpeg 图像文件
- java - Spring Boot Web 套接字中的实时通知