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

Calling C++ from C in a freestanding way

本文关键字:调用 C++ 独立 立方      更新时间:2023-10-16

我有一个用C++编写的内核尝试,我想把它移植到UEFI x86_64,但是使用GNU-efi库的EFI引导加载程序必须用C编写。

如何从 C 跳转到主内核函数?一直使用extern C使得无法使用C++特性,也许可以使用一些汇编代码,或者我可以让引导加载程序调用一个 ELF 文件,该文件将成为带有 ELF 加载器的主内核。这种解决方案是否可行?

一路使用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();