编译Android Fluoride蓝牙时Rust部分链接库报错求助
解决Fluoride蓝牙组件编译中btadapterd的cxxbridge未定义引用错误
问题概述
编译Android Fluoride蓝牙组件(master分支)时,Debian 11环境下btadapterd模块出现libbt_topshim/cxxbridge符号未定义引用错误,C++部分编译正常,但Rust相关链接步骤失败。
环境信息
Rust环境配置
Default host: x86_64-unknown-linux-gnu rustup home: /home/user/.rustup installed toolchains -------------------- stable-x86_64-unknown-linux-gnu (default) nightly-x86_64-unknown-linux-gnu 1.61.0-x86_64-unknown-linux-gnu active toolchain ---------------- stable-x86_64-unknown-linux-gnu (default) rustc 1.64.0 (a55dd71d5 2022-09-19)
- cxxbridge版本:1.0.78
- 执行的编译命令:
./build.py --run-bootstrap ./build.py
错误现象
编译输出大量bluetooth$topshim$rust$cxxbridge1$xxx未定义符号,链接器报错无法生成btadapterd。C++部分编译无异常:
Number of jobs = 4 Building target main inja: Entering directory `/home/user/.floss/output/out/Default' ninja: no work to do.
生成的库文件中libbluetooth_topshim.a仅8字节(为空),说明Rust部分未正确编译。
解决方案
- 切换到指定Rust工具链版本
Fluoride对Rust版本有严格依赖,master分支需使用1.61.0版本:
rustup override set 1.61.0
- 清理编译缓存并重新构建
删除旧输出目录,确保bootstrap重新生成完整构建规则:
rm -rf ~/.floss/output ./build.py --run-bootstrap ./build.py
- 修复cxxbridge版本兼容性
当前cxxbridge 1.0.78与Fluoride版本不匹配,降级到兼容版本:
cargo install cxxbridge-cmd --version 1.0.68
- 补全系统依赖
确保Debian 11安装了Rust编译所需的系统库:
sudo apt update && sudo apt install libclang-dev pkg-config build-essential
- 验证Rust编译状态
重新运行bootstrap后,检查日志中是否有Rust编译输出,确认libbluetooth_topshim.a生成后大小正常(不应为8字节)。
内容的提问来源于stack exchange,提问作者Poxy
相关产品推荐
相关产品推荐

