Kernel 将内核映像从ELF转换为PE

Kernel 将内核映像从ELF转换为PE,kernel,elf,msys,portable-executable,multiboot,Kernel,Elf,Msys,Portable Executable,Multiboot,我正在使用Msys构建我在Linux下编写的自制内核。Linux使用ELF作为二进制格式,Msys使用PE。我的源代码设置允许Grub使用Multiboot规范引导它。在构建结束时,我得到一些未定义的符号: init.o:init.S:(.text+0x14): undefined reference to `edata' main.o:main.c:(.text+0x121): undefined reference to `_alloca' main.o:main.c:(.text+0x

我正在使用Msys构建我在Linux下编写的自制内核。Linux使用ELF作为二进制格式,Msys使用PE。我的源代码设置允许Grub使用Multiboot规范引导它。在构建结束时,我得到一些未定义的符号:

init.o:init.S:(.text+0x14): undefined reference to `edata'

main.o:main.c:(.text+0x121): undefined reference to `_alloca'

main.o:main.c:(.text+0x126): undefined reference to `__main'

../../lib\libkern.a(mem.o):mem.c:(.text+0x242): undefined reference to `_end'

../../lib\libkern.a(mem.o):mem.c:(.text+0x323): undefined reference to `_end'

这些似乎是面向精灵的符号。如果有人能建议我在体育界应该如何处理这些问题,例如,如果有等价物,这将对我有很大帮助

有一些工具可以转换不同的对象文件格式,但它们可能无法满足您的需要


我假设您需要将编译器gcc配置为交叉编译器,以便为您的Msys环境生成正确的格式。

否,我正在尝试编译内核。我一直在linux下编译它,它是elf,现在我想开始在msys下编译它,它是pe。我不是说你在编译内核,但是如果你编译的平台与你的编译器运行的平台不同,你需要一个目标平台的交叉编译器。