有没有人能帮我解释一下为什么lld.lld告诉我:
clang -ffreestanding -mno-red-zone -m32 -c kernel/main.cpp -o kernel.o
ld.lld -m elf_i386 -T kernel/linker.ld -o kernel.bin kernel.o
ld.lld: error: kernel.o: unknown file type
make: *** [Makefile:13: kernel.bin] Error 1
我试图编译kernel/main.cpp,将其与kernel/linker.ld链接,然后生成内核的.bin,但是这个我已经调试了一个小时的错误阻止了我这样做
我试过google了,什么都找不到
这是我的main.cpp文件
extern "C" void kernelMain() {
const char* hello = "Hello world!";
char* vga = (char*)0xb8000;
for(int i = 0; i < 11; i++) {
vga[i*2] = hello[i];
vga[i*2+1] = 0x0F;
}
}
extern "C" void _start() {
kernelMain();
while(1) {}
}
我的链接器.ld文件:
ENTRY(_start)
SECTIONS {
. = 0x1000;
.text : {
*(.text)
}
.data : {
*(.data)
}
.bss : {
*(.bss)
}
}
然后是我的makefile:
NASM=nasm
QEMU=qemu-system-x86_64
CC=clang
LD=ld.lld
all: boot.bin kernel.bin
boot.bin: boot/boot.asm
$(NASM) -f bin -o $@ $<
kernel.bin: kernel/main.cpp kernel/linker.ld
$(CC) -ffreestanding -mno-red-zone -m32 -c $< -o kernel.o
$(LD) -T kernel/linker.ld -o $@ kernel.o
run: boot.bin kernel.bin
$(QEMU) -drive format=raw,file=$<
clean:
rm -f boot.bin kernel.bin kernel.o
任何帮助都很感激
1条答案
按热度按时间fquxozlt1#
解决,我只是用linux与ld和它的工作