c++ - 使用 CXX 桥从 C++ 调用 Rust

标签 c++ rust

我正在尝试构建一个应用程序,其中 C++ 是宿主语言,并且其中一些在 Rust 中实现的函数是从 C++ 调用的。
像所有应用程序一样,这个应用程序也有一个独特的主入口点,称为 main()。
由于我是 Rust 和 CXX Bridge 的新手,我面临的问题是我在 Google 上找到的所有示例代码都在项目的 Rust 部分实现了这个 main() 函数,而我希望它在 C++ 部分实现它。
出于调试目的和解决方法,我在 C++ 代码中添加了一个函数 cppmain()。 Rust main() 然后调用 cppmain() ,它又调用我想测试的 Rust 函数:User launches app --> app entered at Rust main() --> C++ cppmain() --> Rust test function这适用于测试,但不是我最终需要的。
我最终想要的是删除 Rust main(),作为交换,使 cppmain() 成为应用程序的官方 main()(主要是将其重命名为 main()):User launches app --> app entered at C++ main() --> Rust test function但是,我没有成功。 CXX 桥似乎需要一个包含 Rust main() 的 main.rs 文件,如果不是这种情况,构建将失败(使用 cargo )。
如果有人知道如何解决这个问题,请告诉我。谢谢,马里奥

最佳答案

所以这主要是一个构建问题。 CXX对应用程序的入口点是在 Rust 还是 C++ 或其他地方没有任何偏好。您主要通过 main() 找到 CXX 的示例代码在 Rust 中,因为这就是 Cargo 所能做的,这是一个 Rust 构建系统。
如果你想用 Rust 实现的一些函数构建一个 C++ 二进制文件,那么你需要首先将你的 Rust 源代码构建为一个库,然后将它链接到你的 C++ 二进制文件中。
较大的项目通常会有自己的多语言构建系统(Bazel、GN、Buck 等),这会使这更简单,但您可以自己使用 Cargo 或 rustc(您的 Rust 工具链)和 C++ 编译器链接器(Clang、GCC,即你的 C++ 工具链)。
https://doc.rust-lang.org/cargo/reference/cargo-targets.html#the-crate-type-field对于 cargo 方面的事情。您需要一个带有 crate-type 的库箱的 staticlib ,这将产生 .a存档文件,然后您可以将其链接到更大的 C++ 程序。

关于c++ - 使用 CXX 桥从 C++ 调用 Rust,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69418715/

相关文章:

c++ - 通过蓝牙代码示例 C++ 将文件从 PC 传输到其他设备

c++ - std::min 无法将枚举常量解释为有效整数类型 (g++ 4.6.3)

rust - 在 catch_unwind 期间将回溯转换为字符串

c++ - Windows CreateFile - 文件打开时的动态共享模式?

C++ 单元测试遗留代码 : How to handle #include?

c++ - 如何告诉 C++ 使用不同的函数(与另一个函数同名)?

rust - 将浮点和从 Python 重写为 Rust

rust - 看不到枚举值

rust - 特性 `std::ops::Add<std::time::Duration>` 没有为 `chrono::DateTime<chrono::Utc>` 实现

rust - 如何找出需要链接标准库的 crate 依赖项?