[RUST]用rust 编译C code


返回总篇 Rust调用C lib

本篇是rust调用C code的一部分
主要讲我们要怎么让rust帮我们把C的部分调用gcc编译出来
这里我们展示如何编出一个so

  1. 我们先要写一 .c档,把他放在src/c_lib下面

├── build.rs
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── c_lib
│   │   └── mylib.c
│   ├── ffi.rs
│   └── main.rs
看到我们在 c_lib下面放了mylib.c

#include <stdio.h>
void my_lib_func(int a)
{
        printf("this is my c lib(3.0) func:%d\n", a);
}
  1. 修改Cargo.toml, 添加 build

[package]
name = "hello_rust_2"
version = "0.1.0"
authors = ["jason_wang jason_wang@realsil.com.cn"]
edition = "2018"
build = "build.rs"

这里增加一个build定义,为他指定一个.rs档(build.rs)。后面我们会在里面添加针对c code的编译指令。
用来告诉cargo 怎么去编译

  1. 在build.rs里添加编译指令

use std::process::Command;
use std::env;
//use std::path::Path;
fn main() {
    let out_dir = env::var("OUT_DIR").unwrap();
    Command::new("gcc").args(&["src/c_lib/mylib.c","--shared", "-fPIC", "-o"])
        .arg(&format!("{}/libmylib.so", out_dir))
        .status().unwrap();
}
  1. 运行 cargo build
    这时候再运行cargo build, cargo就会帮我们编出我们lib

$ find -iname libmylib.so
./target/debug/build/hello_rust_2-db874a0553dac78f/out/libmylib.so

关于详细的 build script写法。可以去参考cargo book
https://doc.rust-lang.org/cargo/reference/manifest.html#the-build-field
https://doc.rust-lang.org/cargo/reference/build-scripts.html

返回 总篇 Rust调用C lib
在Rust里调用 Clib里的function


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM