【rust】openwrt平台测试demo

0.env

1.编译环境

1.ubuntu-1804
2.x86_64

2.运行环境

3IPQ807x - armv7

1.命令汇总

方式一:使用rustc编译文件

# 1.toolchain
cd /home/xxxxx/toolchain-aarch64_cortex-a53_gcc-5.2.0_musl-1.1.16/bin
ln -s aarch64-openwrt-linux-gcc aarch64-unknown-linux-gnu-gcc
ln -s aarch64-openwrt-linux-ar aarch64-unknown-linux-gnu-ar
# 2. source code
vi main.rs
.... 
# 3. build bin
rustc  --target=aarch64-unknown-linux-gnu -C linker=aarch64-unknown-linux-gnu-gcc main.rs
  1. 使用cargo管理项目
# 1.new cargo config
vi .cargo/config
/*
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-unknown-linux-gnu-gcc"
*/
# 2.build
cargo b --target=aarch64-unknown-linux-gnu --release

2.详细配置

2.1 搭建toolchain

1.toolchain配置
1.1 我的toolchain路径如下:

/* 
/home/xxxxx/toolchain-aarch64_cortex-a53_gcc-5.2.0_musl-1.1.16 
*/
> 1.2 查看当前支持的taget-cpus
rustc --print target-list
==> aarch64-unknown-linux-gnu  //这是我的环境,linux GUN arm64
> 1.3 修改toolchain编译器名称,符合rust要求
cd /home/xxxxx/toolchain-aarch64_cortex-a53_gcc-5.2.0_musl-1.1.16/bin
ln -s aarch64-openwrt-linux-gcc aarch64-unknown-linux-gnu-gcc
ln -s aarch64-openwrt-linux-ar aarch64-unknown-linux-gnu-ar
> 1.4 添加PATH,方法很多,我直接修改了当前用户的profile
vi ~/.profile
/*
  1 if [ -d "$HOME/xxx/bin" ] ; then
30      PATH="$HOME/xxxxx/bin:$PATH"
  1     PATH="$HOME/xxxxx/lib:$PATH"
  2 fi
  */
> 1.4.1 更新当前.profile 或者打开新shell 来更新PATH
> 1.5 直接输入命令 测试PATH是否可用
aarch64-unknown-linux-gnu-gcc // PATH测试而已

2.2 source code

找个目录,新建个文件,随便输入点代码

/* file : main.rs */
fn main() {
     println!("Hello, world!");
}

2.3 编译命令

编译时指定下target、linker,linker是个最基本的东西,不错的话,大概率是可以一步交叉编译PASS的。

  1. 命令参考如下:
rustc  --target=aarch64-unknown-linux-gnu -C linker=aarch64-unknown-linux-gnu-gcc main.rs

3.目标板运行

/* IPQ807x */
root@OpenWrt:/#  Hello , World!

4.补充说明

4.1 用cargo管理上述toolchain代码

4.1.1 新建cargo配置文档

新建.cargo/config 文件
添加linker进入 (我用的这个路径已经添加到PATH中了)

$ cat .cargo/config
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-unknown-linux-gnu-gcc"

4.1.2 编译命令

参考如下:执行target

cargo b --target=aarch64-unknown-linux-gnu --release

生成文件路径:
./target/aarch64-unknown-linux-gnu/release/xxxxxxxxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 好的,下面是一个简单的 Rust 正则表达式示例: ``` extern crate regex; use regex::Regex; fn main() { // 创建正则表达式。 let re = Regex::new(r"\d{4}-\d{2}-\d{2}").unwrap(); // 测试是否匹配。 assert!(re.is_match("2022-01-01")); assert!(!re.is_match("2022-1-1")); } ``` 在这个示例中,我们使用了 `Regex::new` 函数来创建一个正则表达式,然后使用 `is_match` 函数来测试它是否与给定的字符串匹配。 正则表达式 `r"\d{4}-\d{2}-\d{2}"` 表示四个数字、一个连字符、两个数字、一个连字符和两个数字,例如 2022-01-01。 希望这个示例对你有帮助。 ### 回答2: 当然,这里有一个简单的 Rust 正则表达式的示例: ```rust use regex::Regex; fn main() { let re = Regex::new(r"(\d{4})-(\d{2})-(\d{2})").unwrap(); let text = "Today's date is 2022-11-30."; if let Some(captures) = re.captures(text) { println!("Year: {}", &captures[1]); println!("Month: {}", &captures[2]); println!("Day: {}", &captures[3]); } else { println!("No match found."); } } ``` 这个示例使用了 Rust 的 `regex` 库来处理正则表达式。我们创建了一个匹配日期格式的正则表达式模式 `(\d{4})-(\d{2})-(\d{2})`。然后我们尝试在给定的文本中查找匹配该模式的部分。 在这个示例中,我们查找了文本中的日期格式(如`2022-11-30`),并将其分成三个组件:年、月和日。如果找到匹配的日期格式,我们将打印出找到的组件的值。如果没有找到匹配的内容,我们将打印出"No match found."。 这只是一个简单的示例,你也可以根据自己的需要进一步调整正则表达式。 ### 回答3: Rust提供了强大的正则表达式功能,可以用于字符串匹配、替换和提取等操作。下面是一个简单的Rust正则表达式示例: ```rust use regex::Regex; fn main() { let re = Regex::new(r"\d{4}-\d{2}-\d{2}").unwrap(); let text = "Today is 2022-01-01."; if re.is_match(text) { println!("Found a date match!"); } else { println!("No date found."); } } ``` 上述示例使用了Rust中的正则表达式库`regex`。首先我们创建了一个正则表达式,用于匹配`YYYY-MM-DD`格式的日期。然后,我们传入待匹配的文本`text`,使用`is_match`方法判断文本是否与正则表达式匹配。如果匹配成功,打印"Found a date match!",否则打印"No date found."。 请注意,上述代码中的正则表达式使用了`r`前缀的原始字符串字面量,这是为了避免转义字符的干扰,使正则表达式更易读和理解。此外,我们还使用了`.unwrap()`来处理可能出现的错误情况,确保正则表达式编译成功。 除了匹配,Rust的正则表达式库还支持替换和提取等功能,具体使用方法可以参考`regex`库的文档。希望这个简单的示例能帮助你理解Rust中的正则表达式的基本用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过得精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值