之前的几篇文章写过如果编译x86和dv300 版本的bluez,不过那都是在 Centos7 上编译的。然而当我从taobao 上买了一个蓝牙适配器后发现无法使用(淘宝客服说不支持Centos,只支持ubuntu 和 debian)。再者 Centos 现在也停止支持服务了,于是就安装了Debian11系统。这里相当于重新编译bluez的,编译过程也是遇到了一些问题,记录如下。
1,You must have either have gettext support in your C library, or use the GNU gettext library
一开始猜想大概是缺少安装了,但又不知道具体要安装的软件包名,于是上一些提供源的网站上看有没有相似的,比如阿里源上(/etc/apt/source.list 里已经换了阿里源了):
所以安装的时候命令就是:sudo apt -y install gettext_base
因为安装 gettext_base 后再编译还是有问题,我就继续安装了 gettext,如上的 sudo -y install gettext。安装完后第一个错误解决。
2,aclocal-1.13 is missing on your system
这个错误跟之前遇到的是一样的 这篇文章。我搜索了一下目录的这个 aclocal-1.13 如下:
因为系统里已经有了 aclocal-1.16,这里解决办法就是直接创建一个符号链接,aclocal-1.13 链接到 aclocal-1.16。接下来遇到的类似的问题:
3,/usr/bin/ld: .libs/giounix.o: error adding symbols: file in wrong format
这是属于文件格式不一样导致,我编译的是 x86 版本的,而这个文件是 arm 版本的,应该是之前没有删除导致的,直接到目录 glib-2.40.0 目录make clean一下,然后再重新编译一下即可。
4,directive argument is null
网上搜索了一下说是添加 if 判断,其他类似错误一并修改即可:
5,cannot convert 'const NCursesuserPannel<T>*' to 'NCursesPannel'
这个代码看不出具体是啥问题,因为全局搜索了一下也没地方用到,这里直接注释掉了。遇到编译相关的问题再说吧。
6,undefined reference to `tputs'
undefined reference to `tgoto'
undefined reference to `tgetflag'
这里过滤出来的是这些接口实现在 libncurses 库里,而 libreadline 库用到了。是在最后编译 bluez 下的 bluetoothctl 时出错了,但即使加了 -lncurses 也还是有问题,我之前在 Centos 上编译没有这个问题,何解?