c++ 为什么lld说未知的文件类型?

e0uiprwp  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(108)

有没有人能帮我解释一下为什么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

任何帮助都很感激

fquxozlt

fquxozlt1#

解决,我只是用linux与ld和它的工作

相关问题