AutoCXX:使用自动生成的绑定从Rust安全调用C++

2020-08-22 18:09:52

这个项目是一个以高度自动化但安全的方式从Rust调用C++的工具。

其目的是在使用bindgen的变体从现有的C++头文件自动生成接口的同时,它具有CXX的所有流畅安全性。可以将autocxx看作是将bindgen插入到cxx的粘合剂。

现有的CXX工具用于允许安全拥有Rust中的C++类型;特别是像std::Unique_ptr和std::string这样的东西-因此,与正常的绑定不同,Rust代码通常不应该需要使用不安全的代码。

同样的代码也可以通过生成.cc和.h绑定的工具传递:

首先,运行bindgen以生成一些适合CXX::Bridge的绑定(方式与上面完全相同)。

在demo目录中有一个该宏工作的示例。目前,它只能使用最简单的功能。

该项目还包含端到端的测试代码,用于我们最终想要支持的各种C++类型和构造。它们几乎都失败了:)。

这个板条箱还不在crates.io上,目前依赖于bindgen的破解版本和CXX的破解版本。

这将获取特定的bindgen分支(有关repo和分支,请参见Cargo.toml)并将其用作依赖项。同样的道理也适用于CXX。

目前,许多测试都失败了,因此测试运行总体上失败了。可以运行单独的测试,有些测试可以通过。

由于某些原因,如果并行运行,会有更多的测试失败,因此您应该使用Cargo test-test-thread=1。

引擎-所有核心代码。目前是一个Rust库,但是我们不想为外部用户支持这些API,所以它可能需要是一个代码目录,这些代码符号链接到所有其他的子机箱中。以下三个分箱都是该发动机部件的薄壳。

GEN/Build-从build.rs脚本使用的对象,用于从INCLUDE_CXX部分生成.cc和.h文件。

然后,开始使用bindgen fork来添加对更多C++类型的支持,看看我们可以通过测试套件进行到什么程度。

根据Apache许可证、2.0版或麻省理工学院许可证中的任何一种进行许可,可根据您的选择进行选择。