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的文件,内容如下,

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的内容改为,

rust 复制代码
#[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

本文结束

相关推荐
大飞记Python7 分钟前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python
Alice-YUE1 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
云泽8081 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
froginwe111 小时前
DOM 加载函数
开发语言
Hello eveybody1 小时前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
AI进化营-智能译站2 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
iCxhust2 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
qeen872 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
莎士比亚的文学花园2 小时前
Linux驱动开发(3)——设备树
开发语言·javascript·ecmascript
图码2 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻