Rust和C与Visual Studio的兼容性

是否可以创建一个使用rustc编译的静态库并将其链接到使用MSVC编译的可执行文件? 最佳答案 如果只想使用rustc生成静态库,可以通过在crate的lib.rs文件中指定一些属性,并将导出的函数标记为:

#![crate_type = "static_lib"]
#![crate_name = "mylib"]

use libc::c_int;

#[no_mangle]
pub extern fn my_exported_func(num: c_int) -> c_int {
    num + 1
}

然后只需调用rustc lib.rs.这适用于rustc支持的所有平台.

在C/C++标头中,添加:

#pragma once

// only use extern block if the header is put inside a C++ CU
extern "C" {
    int my_exported_func(int num);
}

并根据需要链接输出.lib或.a.

对于Cargo,您可以在Cargo.toml中指定包装箱类型和名称.

资料来源:

> http://rustbyexample.com/attribute/crate.html
> https://doc.rust-lang.org/book/ffi.html

点赞