You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cargo包的客户端与服务端二进制文件间共享模块?

解决方法

你遇到的问题核心是:每个二进制目标的crate根是各自的入口文件,默认情况下相互独立,共享模块无法直接跨入口引用。以下两种方案可以解决:

方案一:将共享代码转为库模块(推荐)

这是Rust多二进制项目共享代码的标准做法,结构更清晰易维护:

  1. 修改Cargo.toml,添加库目标配置:
[lib]
name = "my_shared_lib"
path = "src/shared/mod.rs"

(name可自定义,比如和项目同名)

  1. 在server/mod.rs中同时引用共享库和本地模块:
// 引入共享库内容
use my_shared_lib::something2;

// 引用server目录下的something.rs
mod something;
use crate::something;
  1. client.rs中也能以同样方式引用共享库:
use my_shared_lib::something2;

方案二:调整二进制入口与模块声明

如果不想新增库目标,可通过调整文件结构和声明逻辑解决:

  1. 将server/mod.rs重命名为src/server.rs,作为server二进制的入口文件。

  2. 在src/server.rs中声明shared和server子模块:

// 加载src/shared/mod.rs作为子模块
mod shared;
// 加载src/server/mod.rs作为子模块(需在src/server目录下新建mod.rs)
mod server;

// 引用共享内容
use crate::shared::something2;
// 引用server目录下的something.rs(需在src/server/mod.rs中声明mod something)
use crate::server::something;
  1. 在src/server/mod.rs中声明并引用本地模块:
mod something;
use crate::something;

这样既可以在server入口中访问shared的内容,也能正常调用server目录下的模块。

内容的提问来源于stack exchange,提问作者Pinko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:46:00