当前位置: 首页 > backend >正文

Rust 创建并编译一个可供 C 或其他语言调用的动态链接库

 前言

最近在搞hook,正好看到这例子。于是就有了下文,使用rust 编写动态链接库,供c、c++ 语言调用。仅供参考。

// src/lib.rs
// 禁止编译器改名,使用 C 调用约定
#[no_mangle]
pub extern "C" fn hello() {// println!("Hello from Rust .so!");
}#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {a + b
}

[package]
name = "pcrust"
version = "0.1.0"
edition = "2021"[lib]
crate-type= ["cdylib"][dependencies]
libc = "0.2"
ctor = "0.1"
once_cell = "1.17"
simple_logger = "1.11"
log = "0.4"

创建c文件

#include <stdio.h>// 
void hello(void);
int add(int a, int b);int main() {hello();printf("3 + 4 = %d\n", add(3, 4));return 0;
}

连接生成的库文件 , 调用成功

bruce@bruce-Inspiron-3910:/data/pcrust$ gcc test.c -L target/release -lpcrust -o test
bruce@bruce-Inspiron-3910:/data/pcrust$ ls
Cargo.lock  Cargo.toml  src  target  test  test.c
bruce@bruce-Inspiron-3910:/data/pcrust$ ./test
./test: error while loading shared libraries: libpcrust.so: cannot open shared object file: No such file or directory
bruce@bruce-Inspiron-3910:/data/pcrust$ LD_LIBRARY_PATH=./target/release ./test
Hello from Rust .so!
3 + 4 = 7

说明:

gcc test.c \
    -L target/release \       # 库文件所在目录
    -lpcrust \                 # 链接 libpcrust.so
    -o test

http://www.xdnf.cn/news/8054.html

相关文章:

  • LInux—shell编程
  • docker-volume-backup 备份 ragflow volumes
  • Java虚拟机 -方法调用
  • 第三次中医知识问答模型微调
  • 桥接智能制造:PROFINET与Devicenet混合架构赋能汽车擦净机器人升级
  • 人工智能在工业自动化中的应用与未来趋势
  • Leetcode 1522. N 叉树的直径
  • ShenNiusModularity项目源码学习(28:ShenNius.Admin.Mvc项目分析-13)
  • 冒险岛(MapleStory) 083脚本教程
  • Scrapy爬取heima论坛所有页面内容并保存到MySQL数据库中
  • SQL语句面试题
  • Ubuntu 22.04上升级Node.js版本
  • Web安全与漏洞挖掘
  • C++ inline 内联函数
  • 【PhysUnits】7 类型整数基本结构体(basic.rs)
  • 掩膜合并代码
  • 力扣算法---哈希表总结篇
  • 【无标题】Spring AI 1.0 正式发布!核心内容和智能体详解
  • upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
  • C语言判断素数(附带源码和解析)
  • 第十三届蓝桥杯国赛PythonA题解
  • 贪心算法题目合集2
  • 链表day3
  • Linux电源管理——PSCI初始化流程和多核启动流程
  • 对于final、finally和finalize不一样的理解
  • Java基于SSM的数学辅导微信小程序【附源码、文档说明】
  • 招投标项目记录
  • 一键二次元风格转换:风格转换 ComfyUI 使用教学--
  • 逆向学习笔记1
  • 【性能提升300%】Function Calling高并发实践:gRPC优化+缓存策略+容错设计​