Rust入门:Rust如何调用C静态库的函数
关于Rust调用C++,因为接口比较复杂,貌似Rust不打算支持。而对于C函数,则相对支持较好。
如果要研究C++/Rust相互关系的话,可以参考:
https://docs.rs/cxx/latest/cxx/
Rust ❤️ C++
这里只对调用C静态库做一个最简短的介绍。
根据官方教材的内容略作一个说明,官方的程序在这里,
Unsafe Rust - The Rust Programming Language
这里我们建一个StaticLib1.cpp的文件,内容如下,
#include <cstdlib>
#include <cinttypes>extern "C" std::int32_t abs(std::int32_t n) {return std::abs(static_cast<std::intmax_t>(n));
}
注意,这里接口是extern "C",也就是标准C接口。
无论是用visual studio 2019或GCC,在windows下都可以生成这样一个静态库:StaticLib1.lib。
然后新建一个rust程序,
cargo new rust-to-c
将rust-to-c/src/main.rs的内容改为,
#[link(name = "StaticLib1")]
extern "C" {fn abs(input: i32) -> i32;
}fn main() {unsafe {println!("Absolute value of -3 according to C: {}", abs(-3));}
}
再拷贝lib到,
rust-to-c/StaticLib1.lib,
然后
cargo build
就可以看到生成了文件
rust-to-c/target/debug/rust-to-c.exe,
用指令
cargo run
就可以得到执行结果了,如下,

参考资料:
FFI - The Rustonomicon
本文结束
相关文章:
Rust入门:Rust如何调用C静态库的函数
关于Rust调用C,因为接口比较复杂,貌似Rust不打算支持。而对于C函数,则相对支持较好。 如果要研究C/Rust相互关系的话,可以参考: https://docs.rs/cxx/latest/cxx/ Rust ❤️ C 这里只对调用C静态库做一个最简短的介…...
阿里云Linux系统MySQL8忘记密码修改密码
相关版本 操作系统:Alibaba Cloud Linux 3.2104 LTS 64位MySQL:mysql Ver 8.0.34 for Linux on x86_64 (Source distribution) MySQL版本可通过下方命令查询 mysql --version一、修改my.cnf文件 文件位置:etc/my.cnf进入远程连接后可以打…...
初识C语言—字符串、转义字符、注释
字符串 字符串就是一串字符 用英文双引号括起来的字符 int main() {"dasgfhjkasg\n""hello world!"return 0; } 字符串的结束标志是\0这个转义字符 如何证明呢? int main() {//字符数组 - 数组是一组相同类型的元素char arr[] "hel…...
洛谷 P1731 [NOI1999] 生日蛋糕
题目 题目链接 自己没看题解写的,摸石头过河,解释一下 首先,输入输出都是正整数。先搞定输入,再判断条件,如果无解,输出0,否则输出蛋糕外表面面积Q(这里用全局变量,开l…...
操作教程|使用MeterSphere对恒生UFX系统进行压力测试
恒生UFX(United Finance Exchange,统一金融交换)系统(以下简称为“UFX系统”),是一款帮助证券公司统一管理外部接入客户的系统,该系统整体上覆盖了期货、证券、基金、银行、信托、海外业务等各类…...
算法中的数学知识
文章目录 算法中的数学知识约数约数个数约数之和 筛法求质数阶乘分解解法一解法二: 欧拉函数基本模板筛法求欧拉函数大数据幂的欧拉函数 快速幂费马小定理快速幂求逆元数论分块例题:[因数平方和](https://www.acwing.com/problem/content/4665/)分析:具体…...
2024高频前端面试题 Vue2 和 Vue3 篇
HTML和CSS篇:2024高频前端面试题 HTML 和 CSS 篇-CSDN博客 JavaScript 和 ES6 篇: 2024高频前端面试题 JavaScript 和 ES6 篇-CSDN博客 * Vue2 和 Vue3的区别: 1)双向数据绑定原理的区别 2)根节点的不同 Vue2只能一…...
vue,Promise备忘
网址 https://www.promisejs.org/ 记录 在Vue.js或者其他JavaScript项目中,Promise 是一种处理异步操作的标准机制,用于解决传统的回调地狱问题,提供了一种更优雅、链式调用的编程模型。Promise对象代表一个异步操作的结果,它可…...
软件测试工程师职位笔试知识点细节(2)
一、软件测试分为哪几个阶段,生命周期? 软件测试一般分为单元测试、集成测试和系统测试。 需求分析→测试计划→测试设计、软件开发→测试执行→测试评估 二、一条软件缺陷(或者叫Bug)记录都包含了哪些内容? 一条Bug…...
大数据冷热分离方案
数据冷热分离方案 1、背景 随着业务的发展,在线表中的数据会逐渐增加。常规业务都有冷热数据现象明显的特性(需要访问的都是近期产生的热数据;时间久远的冷数据出于备份、备案溯源等诉求会进行在线保留)。在业务表数据 量可控…...
Vue3中Vue Router的使用区别
在 Vue 3 中,useRouter 和 useRoute 是两个用于 Vue Router 的 Composition API 函数,它们的用途和返回的对象不同,接下来详细了解一下它们的区别以及如何正确使用它们。 useRouter useRouter 用于获取 router 实例,这个实例提供…...
Open CASCADE学习|读取STEP模型文件到XDE中
目录 1、XDE组件简介 2、读取STEP模型文件到XDE中的步骤 3、案例 1、XDE组件简介 Open CASCADE的XDE(扩展数据交换)组件是一个关键的工具,它允许用户通过转换附加到几何BREP(边界表示)数据的附加数据来扩展数据交换…...
flink:自定义数据分区
shuffle随机地将数据分配到下游的子任务。 rebalance用round robbin模式将数据分配到下游的子任务。 global把所有的数据都分配到一个分区。 partitionCustom: 自定义数据分区。 package cn.edu.tju.demo; import org.apache.flink.api.common.functions.; import org.apache…...
力扣图论篇
以下思路来自代码随想录以及官方题解。 文章目录 797.所有可能的路径200.岛屿数量130.被围绕的区域1020.飞地的数量 797.所有可能的路径 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不…...
图腾柱PFC工作原理:一张图
视屏链接: PFC工作原理...
MongoDB开启事务
MongoDB开启事务 配置单节点。到路径C:\Program Files\MongoDB\Server\4.0\bin 使用记事本以管理员权限打开文件mongod.cfg添加如下配置: replication:replSetName: rs02. 重启MongoDB服务 3. 重启后执行命令 rs.initiate()...
风车IM即时通讯系统APP源码DJ2403版完整苹果安卓教程
关于风车IM,你在互联网上能随便下载到了基本都是残缺品, 经过我们不懈努力最终提供性价比最高,最完美的版本, 懂货的朋友可以直接下载该版本使用,经过严格测试,该版本基本完美无缺。 1.宝塔环境如下: Ngin…...
新增流计算计数窗口,TDengine 3.2.3.0 八大板块功能更新
自发布以来,TDengine 3.0 版本在研发人员和社区用户的共同努力下不断优化,产品的稳定性和易用性获得了大幅提升,在知轮科技的智慧轮胎系统、黑格智能 3D 打印业务、韵达快递业务、中国地震台网中心、中移物联智慧出行场景等众多企业项目中获得…...
【架构笔记3】做“用心”之人
凡事就怕“用心”二字,但是用心做事,其实如果没有前提和详情,这本就是一句正确的废话,在一些项目开发和落地过程中,我也有了一些新的体会,自认为不是多余。 我觉得心这个词至少包含四个含义:“…...
前端加密面面观:常见场景与方法解析
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
