我有一个用C ++编写的内核尝试,我想知道将它移植到x86_64 UEFI,但是使用GNU-efi lib的EFI bootloader必须用C语言编写。
如何从C跳转到主内核函数?一直使用extern C
使得C ++特性的使用变得不可能,也许可以使用一些汇编代码,或者我可以使引导加载程序调用ELF文件作为带有ELF加载器的主内核。这个解决方案是否可行?
答案 0 :(得分:7)
一直使用
extern C
使得无法使用C ++特性
没有。在标题中编写extern "C"
并使用C ++编译器编译函数并在单独的翻译单元中使用各种C ++特性没有问题。
您只需要避免输入函数的C ++实现的C ++名称修改。如果你将它用于函数声明,这就是extern "C"
的作用。
这是一个小例子:
kernel.h
extern "C" void main_entry_point();
kernel.cpp
#include "kernel.h"
void main_entry_point() {
// use std::string, std::vector, etc.
}
bootloader.c
#include "kernel.h"
// call main_entry_point()
main_entry_point();