可以使用`extern"c"`来定义函数吗?

我有一些cpp文件,我想使用FFI将它们与LuaJit组合起来。但是问题在于,我必须为几乎每个函数添加extern"c"符号,以使其能够被FFI访问。有没有一种更简单的方法来完成这个任务?

点赞
用户2527795
用户2527795

多个函数可以放置在一个extern "C"块中。这样可以让你每个头文件仅需键入一次extern "C"

extern "C" {
    void function1();
    void function2();
}
2016-11-30 10:02:45
用户3349368
用户3349368

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

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

在 Windows 上,MSVC 使用一个未公开的名称修饰方案。

2018-05-01 17:21:06
用户2056943
用户2056943

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

// 注意:导出的函数在下面使用 C++ 进行了大量计算和医学研究(只有下面这里)
extern "C" {
  void achieve_world_peace(void);

  void treat_cancer(void);
}
2022-05-28 05:22:35