是否可能使用rustc编译创建静态库,并将其链接到使用MSVC编译的可执行文件中?
是否可能使用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
中指定包类型和名称。
参考资料:
i32
并不一定等同于C语言的int
。 - Francis Gagnélibc::c_int
。 - Chris Morgan