这篇文章是用来讲述Rust封装C++的动态依赖库的一些坑吧 当然可能没啥技术含量~~~
我是
C++
小白 哈哈哈哈
要求:因为要封装C++
的dll, 要Rust
能够调用到C++
的动态依赖库
这个好像在国内我没搜到啥相关的有效的资料吧 QAQ, 挺难受的, 简单的Rust
的基础就不讲了, 我把几个坑点说下,下面的内容是建立在你有一些c++
的基础上哈
关于封装接口的库的选择
这里我推荐[rust_bindgen](rust-lang/rust-bindgen ), 这个项目能够为你的头文件以及相关结构体自动生成对接的rust代码, 不需要手动去写 一些函数,目前的缺点是 不能够处理C++
的虚函数。
需要注意的几个点
1. lib文件的搜索
println!("cargo:rustc-link-search=native={}", lib_dir);
这个是告诉cargo 去搜索下面的路径的lib文件(不要问啥为啥是println
),
注意 仅仅是去搜索,如果你在你的rust代码中不去link
那个代码,他还是不会加入到rustc
的编译参数里面的哦
2. 对于dll搜索, 我们需要使用
println!("cargo:rustc-flags=-L {}"