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

本文结束

相关推荐
泡海椒1 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb1 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
T1mzhou1 小时前
ARM64 Linux 6.10内核启动流程7-ioremap和readl writel
linux·服务器·c语言
Keven_112 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
脉动数据行情12 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕3 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2333 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
OpenAnolis小助手4 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
小玮看世界4 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
ForteScarlet4 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains