Skip to content

uccus/clib-rust-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust call c

这个项目是Rust调用c接口的示例,参考rust-openssl的目录结构,内部设计复杂类型如数组,指针,二级指针,字符串转换等,在此记录一下。

smf-sys项目是对c接口的定义,一般只做定义,不做封装。

smf项目中引入smf-sys为ffi,对接口进行封装,提供最终对外接口。

smf-jni是将smf接口封装给java调用。

针对错误码,还可以创建smf-error项目,单独对错误码进行处理。

文档结构也可以参考rust-openssl。

此外,编译目标指定,例:cargo build --target i686-pc-windows-msvc

也可以指定编译某个子包,例:cargo build -p smf-jni

target
i686-pc-windows-msvc ✔️
x86_64-pc-windows-msvc ✔️
i686-unknown-linux-gnu ✔️
x86_64-unknown-linux-gnu ✔️
x86_64-linux-android ✔️
wasm32-unknown-unknown

可以通过rustup show查看当前工具链安装的target

可以通过rustup target list查看支持的所有target

可以通过rustup target add添加target

可以通过rustc --target TARGET --print cfg来查看当前目标的环境变量

编译android版本的jni

# 设置环境变量(windows中)
set ANDROID_NDK_HOME=E:/tools/android/android-ndk-r23c
set ANDROID_HOME=E:/tools/android/sdk
# 添加android的x86_64目标架构,其他架构类似
rustup target add x86_64-linux-android
# 安装cargo-ndk命令工具
cargo install cargo-ndk
# 编译
cargo ndk -t x86_64 build

编译wasm

参考rustwasm。这里编译没有成功,错误信息:thread 'main' panicked at 'assertion failed: address % 4 == 0', crates\wasm-interpreter\src\lib.rs:310:17,大概率是依赖的本地库编译有问题。

wasm-pack build smf-js

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published