我今天尝试做一些不同的事情,但它不起作用):我试图遵循下面链接的一些教程来开发基本的OS。我已将原始教程的程序部分更改为更面向对象的方法。我已经针对自己的代码多次检查了原始教程,发现在功能方面没有什么不同。我认为这可能与我设置交叉编译器有关吗?
存储文件的存储库为https://github.com/kingga/os
在call _kernel_main
中用boot.asm
注释时,出现以下错误:
Cleaning build directories.
Creating build and iso directories.
Building the bootloader.
Building the kernel.
Linking the kernel and bootloader.
~/opt/cross/lib/gcc/i686-elf/9.2.0/../../../../i686-elf/bin/ld: build/kernel.o: in function `kernel_main()':
kernel.cpp:(.text+0x34): undefined reference to `operator new(unsigned long)'
collect2: error: ld returned 1 exit status
Cleaning build directory.
当我取消注释_kernel_main
时,出现此错误:
Cleaning build directories.
Creating build and iso directories.
Building the bootloader.
Building the kernel.
Linking the kernel and bootloader.
~/opt/cross/lib/gcc/i686-elf/9.2.0/../../../../i686-elf/bin/ld: build/boot.o: in function `start':
boot.asm:(.mbHeader+0xe): undefined reference to `_kernel_main'
这些是我在构建此教程时遵循的教程。我将CPlusPlus教程用于实际的内核和引导程序,并使用OSDev进行了交叉编译器设置。
有人知道我在做什么错吗?如果有帮助,我将使用Ubuntu 19.10。
这也是使用此配置脚本在VM上全新安装的19.10,因此您可以看到计算机的完整设置:
https://github.com/kingga/personal-linux-provision-script
由于@Jester,链接器问题可通过commit解决: https://github.com/kingga/os/commit/49d3b55ed684a867d4a6321ad52f8c3268e8098a
感谢所有帮助我的人。
出于历史目的的原始问题:https://github.com/kingga/os/tree/stackoverflow-issue