跳转到内容
IriX 文档

Rust FFI 与编译

Rust 动态库的编译流程、产物复制与新增 crate 的完整检查清单。

IriX 通过 FFI 调用 Rust 编译出的动态库。理解编译与复制流程是日常开发的基础。

动态库对应 crateDart 侧使用
xmc_backup.dllbackupbackup_ffi.dart
xmc_downloader.dlldownloaderdownloader.dart(Downloader.downloadFile)
xmc_http_client.dllhttp_clienthttp_ffi.dart(HttpFfiService)
xmc_file_ops.dllfile_opsfile_ops_ffi.dart
xmc_logger.dllloggerlogger_ffi.dart
xmc_db_client.dlldb_clientdb_client_ffi.dart(DbClientFfi)
xmc_vector_store.dllvector_storeknowledge 相关服务

完整的调用关系见 FFI 服务清单。

Terminal window
# 编译(Windows 也可直接双击 build_rust.bat)
cargo build --release --manifest-path rust/Cargo.toml
# Linux / macOS
./build_rust.sh

产物复制目标(脚本已处理):

  • Windows → windows/runner/(同时复制一份到项目根目录)
  • Linux → linux/
  • macOS → macos/

新增一个 Rust crate 时,需要同步更新以下 7 处:

  1. rust/Cargo.toml 的 members 列表
  2. build_rust.bat(Windows 构建脚本)
  3. build_rust.sh(Linux/macOS 构建脚本)
  4. linux/CMakeLists.txt(Linux .so 安装)
  5. windows/runner/CMakeLists.txt(Windows 复制)
  6. macos/Runner.xcodeproj/project.pbxproj(dylib 复制 + 签名脚本)
  7. 两个 CI workflow:
    • .github/workflows/build-and-test.yml
    • .github/workflows/package.yml

Rust 导出函数通过 FFI 调用,Dart 侧统一封装在 lib/services/*_ffi.dart:

Rust 导出函数 ←─ package:ffi 绑定 ←─ lib/services/*_ffi.dart ←─ 业务服务调用

典型封装示例:backup_ffi.dart、file_ops_ffi.dart、logger_ffi.dart、http_ffi.dart、db_client_ffi.dart。新增 API 服务遵循现有 *_api_service.dart / *_provider.dart 命名模式。