[XWOS-RUST]4.支持多个单元包

问题

开发XWRUST的过程中,需要将库与应用的代码分离在不同的crate中,在实践过程中,
发现RUST有如下局限:

  • 不能将两个crate都编译成staticlib,staticlib的crate不可列举在[dependencies]
    说明staticlib是用来给C/C++调用的;
  • 只有rlib的crate列举在[dependencies],编译staticlib时,
    所有[dependencies]内的crates都会打包在staticlib内;
  • 与C/C++代码链接时,不可存在两个以上的staticlib,除非这些staticlib的依赖完全
    无关系(事实上这很难实现),否则会出现重复定义的错误。

解决方法

通过实践,研究出解决方法:

  • xwrust_main()移动到一个电路板模块bm/rustapp中,此模块编译成staticlib;
  • 所有RUST的应用只能集中在rustapp内;
  • 其他crates只作为rustapp的[dependencies]
  • 其他crate设置为crate-type = ["rlib"],并删除xwmo.mk不再使用XWOS的编译系统进行编译。

实验代码

  • 代码仓库:git clone --recursive https://gitee.com/xwos/WeActMiniStm32H750.git
  • commit:4d0837bfe227a6316288e4f1fa60a15276504159
cd XWOS
git pull
git checkout -b rust-multicrates 4d0837bfe227a6316288e4f1fa60a15276504159

你可能感兴趣的:(XWOS-RUST,XWOS,XWOS,rust,xwrust)