请教个rust的动态库的问题,c系列可以生成动态库,其他的模块使用动态库就行了。
类似的rust这块这种合作方式是什么样子的?
比如我一个收发消息的组件,10个模块都需要它,c类可以使用动态库,
rust怎么办?每个组件都引入包,那每个组件都很大,有朋友碰到过吗?
1
共 6 条评论, 1 页
请教个rust的动态库的问题,c系列可以生成动态库,其他的模块使用动态库就行了。
类似的rust这块这种合作方式是什么样子的?
比如我一个收发消息的组件,10个模块都需要它,c类可以使用动态库,
rust怎么办?每个组件都引入包,那每个组件都很大,有朋友碰到过吗?
评论区
写评论cdylib了解下
--
👇
heliping: dylib
dylib用于将该依赖编译为动态库, 这样依赖其的bin类型crate会在运行前由操作系统的动态库加载器加载该依赖.其产生的文件扩展名在Linux上为so, Windows上为dll, macOS/iOS上为dylib, 且Linux的文件名具有lib的前缀.
我们随后会发现rust生成的dylib和C语言库略有不同, 这导致其用法也发生了很大的变化.在目前, dylib几乎只能作为cargo编译的中间产物使用, 就像rlib一样.
---这能用吗?
--
👇
bestgopher: 你不都说了,动态库啊
补充一下,给 python 写模块,写 WASM ,给 Lua 写模块我看到的都用的 cdylib 。
不过 rlib 平台无关倒是感觉足够 Rust 模块之间复用了,然后其他语言需要的地方 cdylib 包一层生成 .so
cdylib 大概可行,试过用 mlua 库给 Lua 写模块,生成类型就是 cdylib 的 .so 。
其实有文章讲过 https://rustcc.cn/article?id=98b96e69-7a5f-4bba-a38e-35bdd7a0a7dd¤t_page=1
以及 RustFFI的文章 https://rustcc.cn/article?id=28e2bd78-99fc-436b-b48a-d7b5a00b1109
然后 dylib 确实是 Rust 动态库,而遵循 c 约定的 cdylib 对其他语言调用支持就比较好。
把相应的rust库编译成dylib,其他的rust组件去调用这个编译好的dylib就可以了
dylib
dylib用于将该依赖编译为动态库, 这样依赖其的bin类型crate会在运行前由操作系统的动态库加载器加载该依赖.其产生的文件扩展名在Linux上为so, Windows上为dll, macOS/iOS上为dylib, 且Linux的文件名具有lib的前缀.
我们随后会发现rust生成的dylib和C语言库略有不同, 这导致其用法也发生了很大的变化.在目前, dylib几乎只能作为cargo编译的中间产物使用, 就像rlib一样.
---这能用吗?
--
👇
bestgopher: 你不都说了,动态库啊
你不都说了,动态库啊