前言
创建动态/静态库
修改Cargo.toml
文件,添加如下内容:
crate-type的取值有:
staticlib
:创建其他语言调用的静态库,在Windows下为.lib
文件,在Linux下为.a
文件。dylib
:创建一个动态Rust库,在Windows下为.dll
文件,在Linux下为.so
文件。cdylib
:创建其他语言调用的动态库,在Windows下为.dll
文件,在Linux下为.so
文件。rlib
(默认):创建Rust调用的静态库,在Windows下为.rlib
文件。
Rust的名称修饰
Rust的名称修饰规则与C++不同,但是也有名称修饰的存在,主要是因为Rust的函数名和参数名都是可以重载的,所以需要名称修饰来区分不同的函数。 贴一个华为的博客文章其中关于名称修饰的规则讲的很详细。
去除名称修饰
我们导出的函数需要通过#[no_mangle]
来去除名称修饰,如下:
否则符号表中找不到我们定义的函数,在链接时就会出现错误。
静态库
修改Cargo.toml
文件,添加crate-type
属性,使其生成一个静态库。
编译生成静态库
创建一个C++文件
编译链接
结果:
动态库
TODO…