微软宣布使用rust重构部分c++项目, linux也支持rust编写内核,未来rust前景怎么样
1条回答 默认 最新
关注 【相关推荐】
- 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Linux Rust环境安装
- 除此之外, 这篇博客: Rust linux 系统接口使用中的 首先实验C 代码和 Rust的 接口访问 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
linux 默认的命名规则就是 蛇形命名规则
Cargo.toml[package] name = "ArmTest" version = "0.1.0" edition = "2021" build = "src/build.rs" # 需要使用的build.rs 的路径必须要有 # 我是放到cargo 工程里面的 src 路径里了 [dependencies] clib="^0.2.1" # linux api crate lib dunce="0.1.1" #这个也是build 要使用的crate lib [build-dependencies] cc = {version = "1.0.72",features=["parallel"]} #buid 的依赖,根据这个些就行
对unsafe 的引入,需要重新改写C接口以供使用
在不安全的情况下保证安全
build.rsfn main(){ //这个file 是要引用的.c 文件的路径,会将其转化为Rust声明 cc::Build::new().file("/home/hongdayu/arm/Clib/libcuser.c").compile("user"); //如果发现该.c 文件发生变化,还会重新编译,这个在实际中的用处很大 println!("cargo:return-if-changed=/home/hongdayu/arm/Clib/libcuser.c"); }
main.rs
use std::os::raw::c_int; extern "C"{ pub fn debug(mask: c_int) -> c_int; } // 如果你使用的话,不需要对他初始化,否则还有告警,这是编码习惯的约束 // 注意蛇形命名,要不然会有默认的告警产生 fn main() { let mut res: i32; unsafe{ //unsafe 作用域,将引入的C函数,代码约束,保证安全性 res = debug(1); print!("res: {}\n",res); res = debug(2); print!("res: {}\n",res); } let unsafe_ask = res.to_string(); print!("unsafe_ask: {}",unsafe_ask); }
use_lib.c
#include<stdio.h> #include<stdint.h> int debug(int mask){ if(mask == 1){ printf("Arm board: Hello Rust\n"); return 0; } if(mask == 2){ printf("Oh My God: Rust ???\n"); return 0; } return -1; }
结果如下图所示:
hongdayu@linux:~/arm/Rust/ArmTest/target/debug$ ./ArmTest Arm board: Hello Rust res: 0 Oh My God: Rust ??? res: 0 hongdayu@linux:~/arm/Rust/ArmTest/target/debug$
这只是一个简单的示例,指针,最好使用智能指针转化一下, 我还没试过,慢慢来
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 c++ gmssl sm2验签demo
- ¥15 关于模的完全剩余系(关键词-数学方法)
- ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
- ¥15 关于移动机器人坐标计算
- ¥30 模拟电路 logisim
- ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音