c - i686-elf-gcc 生成 64 位文件而不是 32 位文件?
问题描述
我正在遵循 osdev 准系统教程并为其制作了一个自定义 Makefile,但是当我运行make kernel
将系统编译为 .bin 文件时,我在链接时遇到了错误。
链接器输出: src/kernel.o: file not recognized: file format not recognized
链接器命令: $HOME/opt/cross/bin/i686-elf-gcc -T linker.ld -o kernel.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc
我快速查看了一下,发现 i686-elf-gcc 交叉编译器生成了一个 64 位文件。诡异的。我尝试用相同的标志编译 kernel.c,它工作得很好。问题可能是什么?
注册会计师:
-std=gnu99 -ffreestanding -O2 -Wall -Wextra
制作文件:$(GCC) $(CPARAMS) -c $@ -o $<
所以实际的命令看起来像这样$HOME/opt/cross/bin/i686-elf-gcc -std=gnu99 -ffreestanding -O2 -Wall -Wextra -c kernel.c -o kernel.o
通过 make 运行编译器生成的文件:
kernel.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
从 shell 运行编译器生成的文件:
kernel.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
解决方案
推荐阅读
- c - C getline内存泄漏不同的行为
- javascript - AJAX Post 未调用 ASP.NET Web 窗体 [WebMethod]
- reactjs - 如何在显示某行图像的平面列表中制作嵌套轮播
- assembly - x86-16 imul 指令“参数错误”?
- flutter - 如何在不重新构建应用程序的情况下个性化变量
- r - tibble and dataframe, function
- rust - 使用 Rust bindgen 链接头文件的问题
- amazon-web-services - AWS X-Ray 和 StepFunctions -> 无法获取 TraceHeader
- hibernate - 两个外键的复合主键
- python - 为 LDA 模型选择最佳的连贯性分数