linux 下rust获取可执行文件依赖并拷贝到指位置

use std::fs;
use std::process::Command;
use std::env;
use std::string;
use regex::{Captures, Regex};
fn main() {
    println!("命令手册:  deploy  /home/xxx/ware/exec  /home/xxx/ware/save_lib");
    let args: Vec<String> = env::args().collect();
    if args.len() !=3{
        println!("格式错误");
        return ;
    }
    let  exe_path = &args[1];
    let  dest_path = &args[2];
    let re =egex::new(r">.+\(").expect("匹配失败");
    println!("exe_path is {:?}",exe_path);
    println!("lib_save_dest_path is {:?}",dest_path);
    let output = Command::new("ldd")
        .arg(exe_path)
        .output()
        .unwrap();
    let libs_path = String::from_utf8(output.stdout).unwrap();
    let libs_path_trim = libs_path.trim();
    let libs_path_vec:Vec<&str> = libs_path_trim.split("\n\t").collect();
    //println!("{:?}",libs_path_vec);
    println!("依赖库位置如下:");
    for libs in libs_path_vec{
        match re.captures(libs){
            None => {}
            Some(lib) => {
                let lib_path_width_errors = &lib[0].to_owned();
                let lib_path = lib_path_width_errors[1..lib_path_width_errors.len()-1].trim();
                let lib_name = lib_path.split('/').last().unwrap();
                println!("{:?}",lib_name);
                fs::copy(lib_path, format!("{}/{}", dest_path, lib_name)).expect("复制失败");
            }
        };
    }
}
其实这个命令就可以得到绝大部分库的路径
ldd ./exe_path | grep -o '\/.*so\.[0-9]' | 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值