所以我给一个C++库写了一个RuffFi,它有一个外部的"C"块,里面有C样式的函数头.我的低级 foreign 金融机构建立了.

然而,当我在另一个项目中使用我的FFI时,它没有正确链接,我得到了对操作符new()、delete()等的未定义引用.

我的问题是:

  1. 我是因为这是C++而不能连接 rust ,而不是C++吗?

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

  3. 我能帮我做点什么吗.不知怎么构建的,包含了这些C++组件,如果有的话,如何?我目前使用的是gcc crate .

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

推荐答案

您需要动态链接到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++");
}

See full example on github

有关构建脚本的更多信息,请参阅the Cargo guide.

Rust相关问答推荐

Rust,polars CSV:有没有一种方法可以从impll BufRead(或任何字节迭代器)中读取CSV?

如何使用syn插入 comments ?

为什么允许我们将可变引用转换为不可变引用?

如何模拟/创建ReqData以测试Actix Web请求处理程序?

根据填充系数以相对大小在给定空间中布局项目

期望一个具有固定大小 x 元素的数组,找到一个具有 y 元素的数组

从 rust 函数返回 &HashMap

为什么需要静态生命周期以及在处理 Rust 迭代器时如何缩小它?

通过mem::transmute将数组展平安全吗?

有什么方法可以通过使用生命周期来减轻嵌套生成器中的当生成器产生时borrow 可能仍在使用错误?

如何递归传递闭包作为参数?

在每个循环迭代中删除borrow

改变不实现克隆的 dioxus UseState struct

Rust HRTB 是相同的,但编译器说一种类型比另一种更通用

从函数返回 u32 的数组/切片

具有生命周期和以后引用的可变方法

如何将 u8 切片复制到 u32 切片中?

如何在 Rust 的内置函数上实现特征?

返回 &str 但不是 String 时,borrow 时间比预期长

在 macro_rules 中转义 $ 美元符号