【问题标题】:Can I make function `extern "c"`?我可以制作函数`extern“c”`吗?
【发布时间】:2017-01-02 20:57:34
【问题描述】:

我有一些 cpp 文件,我想使用 FFI 将它们与 LuaJit 结合起来。

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

有没有更简单的方法可以做到这一点?

【问题讨论】:

  • 您可以将所有函数组合在一个外部 C 块中。这还不够吗?
  • cpp文件不是我自己创建的,除了它们的功能我一无所知。我只想通过 Lua 使用它们。
  • 首先,您是否检查过您的所有功能都准备好extern "C"-ready 了吗? IE。他们是否只使用 C 类型(没有引用、没有类等)? extern "C" 只关闭名称修改。
  • @ZehuiLin 你可以用extern "C"标记任何你想要的函数,但这并不意味着所有标记的函数都是C兼容的。
  • 感谢您的建议。我阅读了代码,发现我可以为它添加一个extern "C" 块。它现在似乎工作了。

标签: c++ c lua ffi luajit


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    Linux 上的 Gcc 和 Clang 使用 Itanium C++ ABI Name Mangling Rules,可以在here.找到它

    在 Windows 上,MSVC 使用未记录的名称修改方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 2012-09-20
      • 2011-07-14
      • 1970-01-01
      相关资源
      最近更新 更多