OS Dev-未定义的参考_kernel_main和未定义的运算符new(未签名的长整数)

时间:2019-11-16 01:10:04

标签: c++ assembly linker operating-system

我今天尝试做一些不同的事情,但它不起作用):我试图遵循下面链接的一些教程来开发基本的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

编辑1

由于@Jester,链接器问题可通过commit解决: https://github.com/kingga/os/commit/49d3b55ed684a867d4a6321ad52f8c3268e8098a

编辑2

感谢所有帮助我的人。

出于历史目的的原始问题:https://github.com/kingga/os/tree/stackoverflow-issue

0 个答案:

没有答案