[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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Tokio 2. Rusty 3. Diesel 4. Rocket 5. Hyper 6. Serde 7. Actix 8. Rustdoc 9. Rustfmt 10. Iron 11. Clippy 12. Amethyst 13. Piston 14. Rust-bindgen 15. Rust-openssl 16. Rust-crypto 17. Rust-url 18. Rust-image 19. Rust-Markdown 20. Rust-websocket 21. Rust-xml 22. Rust-bcrypt 23. Rust-aws-sdk 24. Rust-redis 25. Rust-postgres 26. Rust-mongodb 27. Rust-cassandra 28. Rust-kafka 29. Rust-zookeeper 30. Rust-actix-web 31. Rust-nom 32. Rust-yew 33. Rust-rocket-contrib 34. Rust-sqlx 35. Rust-jwt 36. Rust-graphql 37. Rust-wasm 38. Rust-mio 39. Rust-reqwest 40. Rust-hyperium 41. Rust-hyper-tls 42. Rust-log 43. Rust-toml 44. Rust-cargo 45. Rust-derive-newtype 46. Rust-crate 47. Rust-chrono 48. Rust-tokio-postgres 49. Rust-async-std 50. Rust-r2d2 51. Rust-actix-session 52. Rust-actix-cors 53. Rust-actix-multipart 54. Rust-actix-files 55. Rust-actix-identity 56. Rust-actix-rt 57. Rust-actix-secure-cookie 58. Rust-actix-web-httpauth 59. Rust-actix-web-static-files 60. Rust-actix-web-templating 61. Rust-actix-web-validators 62. Rust-actix-websocket 63. Rust-actix-service 64. Rust-actix-extras 65. Rust-actix-async 66. Rust-actix-config 67. Rust-actix-json 68. Rust-actix-query 69. Rust-actix-redis 70. Rust-actix-session-cookie 71. Rust-actix-web-http-headers 72. Rust-actix-web-http-errors 73. Rust-actix-web-http-methods 74. Rust-actix-web-http-response 75. Rust-actix-web-http-types 76. Rust-actix-web-http-utils 77. Rust-actix-web-http-ws 78. Rust-actix-web-http-request 79. Rust-actix-web-http-body 80. Rust-actix-web-http-cookie 81. Rust-actix-websocket-impl 82. Rust-actix-websocket-middleware 83. Rust-actix-websocket-protocol 84. Rust-actix-websocket-headers 85. Rust-actix-websocket-utils 86. Rust-actix-websocket-diagnostics 87. Rust-actix-websocket-message 88. Rust-actix-websocket-stream 89. Rust-actix-websocket-tcp 90. Rust-actix-websocket-tls 91. Rust-actix-websocket-unix 92. Rust-actix-websocket-ws 93. Rust-actix-websocket-websocket 94. Rust-actix-websocket-rpc 95. Rust-actix-websocket-rpc-server 96. Rust-actix-websocket-rpc-client 97. Rust-actix-websocket-rpc-transport 98. Rust-actix-websocket-rpc-message 99. Rust-actix-websocket-rpc-error 100. Rust-actix-websocket-rpc-util
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值