以独立的方式从C调用C++

Rot*_*er2 -1 c c++

我有一个用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.h

extern "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)