基于BlueZ 5.62开发BLE应用时shell.h声明对应gcc链接库是什么
BlueZ 5.62 shell.h相关undefined reference报错解决方案
根本原因
bt_shell_printf这类声明在shell.h的接口属于BlueZ的内部私有工具函数,并未被打包进对外发布的libbluez.so动态库,因此仅通过pkg-config链接bluez库无法找到对应符号。
可用解决方法
- 方案1:链接BlueZ编译生成的内部静态库
完成BlueZ 5.62源码编译后,其src/shared目录下会生成libshared.a静态库,在你的gcc链接参数中新增如下配置即可:
注意链接顺序:-L/你的BlueZ5.62源码路径/src/shared -lshared-lshared需要放在现有所有pkg-config生成的链接参数之后。 - 方案2:拷贝对应源码到项目内编译
如果你不想依赖BlueZ未公开的内部静态库,可以直接将BlueZ源码中src/shared/shell.c和配套的头文件拷贝到你的项目源码目录,和你的业务代码一起编译,即可解决符号缺失问题。
注意事项
- shell相关接口属于BlueZ私有接口,不保证跨版本兼容性,后续升级BlueZ版本时可能需要自行适配接口变更。
- 如果你要开发BlueZ的自定义shell扩展,建议直接在BlueZ源码树内编写插件,无需单独做外部链接配置。
内容的提问来源于stack exchange,提问作者Hillybilly
相关产品推荐
相关产品推荐

