gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:11:11 28 4
gpt4 key购买 nike

我正在尝试构建一个应用程序,其中 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com