当前位置:   article > 正文

Rust入门:Rust如何调用C静态库的函数_rust调用c函数

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

  1. #include <cstdlib>
  2. #include <cinttypes>
  3. extern "C" std::int32_t abs(std::int32_t n) {
  4. return std::abs(static_cast<std::intmax_t>(n));
  5. }

注意,这里接口是extern "C",也就是标准C接口。

无论是用visual studio 2019或GCC,在windows下都可以生成这样一个静态库:StaticLib1.lib。

然后新建一个rust程序,

cargo new rust-to-c

将rust-to-c/src/main.rs的内容改为,

  1. #[link(name = "StaticLib1")]
  2. extern "C" {
  3. fn abs(input: i32) -> i32;
  4. }
  5. fn main() {
  6. unsafe {
  7. println!("Absolute value of -3 according to C: {}", abs(-3));
  8. }
  9. }

再拷贝lib到,

rust-to-c/StaticLib1.lib,

然后

cargo build

就可以看到生成了文件

rust-to-c/target/debug/rust-to-c.exe,

用指令

cargo run

就可以得到执行结果了,如下,

参考资料:

FFI - The Rustonomicon

本文结束 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/556705
推荐阅读
相关标签
  

闽ICP备14008679号