请问,有没有人知道如何将启动链接到内核?例如,我有这个代码用于启动:
[BITS 16]
[ORG 0x7C00]
[global start]
[extern _main]
start:
call _main
cli
hlt
这是我的C ++文件:
#include <iostream>
#include <string>
int main()
{
std::cout << "Hello World" << std::endl;
return 0;
}
现在我将.cpp文件编译为.o文件,将.asm文件编译为.o文件。但是,我现在如何将这些文件链接到kernel.bin?它有一些代码吗?这段代码会起作用吗?请帮帮我。
答案 0 :(得分:5)
首先,您不能使用C / C ++标准库,因为在业余爱好操作系统中,它不存在*。
其次,您的C ++代码似乎是32位格式,而汇编代码是16位格式。除非两者都是16或两者都是32,否则这些不能链接。
我建议查看OSDev Wiki(也发布了用户786653)...它有许多有用的资源可以让您开始编写操作系统。
如果您真的想从头开始使用16Bit程序集,并且希望能够使用32Bit C ++代码,则必须执行以下步骤:
(注意这样做,你必须具备高水平的C / C ++知识,至少在汇编方面有一些知识)
*如果您在自己的库中编程,则忽略第一个语句。
希望这有帮助!
-Adrian
答案 1 :(得分:2)
从C++ Bare Bones查看OSDev wiki。但是,您的代码目前还远远无法使用iostream
。