我可以使函数"外部"c""吗?

Can I make function `extern "c"`?

本文关键字:外部 函数 我可以 可以使      更新时间:2023-10-16

我有一些cpp文件,我想用FFI把它们和LuaJit结合起来。

但问题是,我必须为几乎每个函数添加extern "c"符号,以使FFI能够访问它们。

有没有更简单的方法来做这件事?

多个函数可以放在单个extern "C"块中。这允许您为每个头文件只输入一次extern "C"

extern "C" {
    void function1();
    void function2();
}

虽然它是不可移植的,但您可以实现一个函数签名并使用名称修改协议生成修改过的名称来查找FFI的符号名称。

Linux上的Gcc和Clang使用Itanium c++ ABI名称修改规则,可以在这里找到。

在Windows上,MSVC使用非文档化的名称混淆方案。

是。定义一个简单的、最小的包装器API并导出它:

// NOTE: Exported functions do heavy parley and medical-research leveraging C++ under the hood (and only and the hood).
extern "C" {
  void achieve_world_peace(void);
  void treat_cancer(void);
}