链接到具有extern"C"函数的C++库

Ant*_*ope 10 ffi rust

所以我正在为一个C++库编写一个Rust FFI,它有一个带有C风格函数头的extern"C"块.我的低级FFI构建.

但是,当我在另一个项目中使用我的FFI时,它没有正确链接,我得到运算符new(),delete()等的未定义引用.

我的问题是:

  1. 我搞砸了,因为这是C++,你不能将Rust链接到C++吗?

  2. 使用FFI库的应用程序是否应该以某种方式处理链接问题,如果是这样,如何处理?

  3. 我的libsomething.a可以以某种方式构建,以包含这些C++组件,如果是这样,如何?我目前正在使用gcc包装箱.

  4. 把你自己的解决方案放在这

Ren*_*non 6

您需要动态链接以libstdc++获取C++代码所需的符号.您可以rustc在构建脚本中指示这样做:

extern crate gcc;
use std::default::Default;

fn main() {
    gcc::compile_library("libhello.a", &Default::default(), &["cpp/hello.cpp"]);
    println!("cargo:rustc-flags=-l dylib=stdc++");
}
Run Code Online (Sandbox Code Playgroud)

请参阅github上的完整示例

有关构建脚本的更多信息,请参阅货物指南.