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