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

时间:2018-01-28 13:46:14

标签: c++ c

我有一个用C ++编写的内核尝试,我想知道将它移植到x86_64 UEFI,但是使用GNU-efi lib的EFI bootloader必须用C语言编写。

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

1 个答案:

答案 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();