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

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.dtcms.com/a/206194.html

相关文章:

  • 零基础设计模式——第二部分:创建型模式 - 原型模式
  • OpenCV 图像对象的创建与赋值
  • AI与.NET技术实操系列(六):实现图像分类模型的部署与调用
  • (视觉)分类、检测与分割在不同网络中的设计体现
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (3)
  • 【LeetCode 热题 100】二分查找 系列
  • 在Java的list.forEach(即 Stream API 的 forEach 方法)中,无法直接使用 continue 或 break 语句的解决办法
  • linux中部署jdk,开机自启动jdk以及linux中java开机自启某个jar包文件
  • 5月22总结
  • Seay代码审计工具
  • labview实现将百分制分数转换为等级制分数
  • Linux shell 正则表达式高效使用
  • Labview基础使用教程
  • 2025海外短剧CPS系统开发指南:高付费市场解析与增速全景图
  • HUAWEI华为MateBook D 14 2021款i5,i7集显非触屏(NBD-WXX9,NbD-WFH9)原装出厂Win10系统
  • Flutter生物识别认证之Flutter指纹认证Flutter人脸认证
  • 网络编程 之网络七层模型、TCPUDP协议、JAVA IO 发展历程
  • LeetCode 3356.零数组变换 II:二分查找 + I的差分数组
  • 数据分析师如何用OKR驱动业务增长
  • [Java][Leetcode middle] 6. Z 字形变换
  • Python可视化设计原则
  • 【工作流】Fastgpt配置豆包模型-火山引擎
  • 青少年编程与数学 02-019 Rust 编程基础 23课题、web服务器
  • React19 项目开发中antd组件库版本兼容问题解决方案。
  • React 如何封装一个可复用的 Ant Design 组件
  • Flask vs. Django:如何选择最适合你的 Web 框架?
  • 框架开发与原生开发的权衡:React案例分析(原生JavaScript)
  • JVM部分内容
  • MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为无法确定(验证)开发者身份?怎么解决
  • uniapp实现的简约美观的票据、车票、飞机票模板