简介
在写基于gattlib库的ble代码时,发现编译gattlib的源码和运行示例程序时总会报python线程的错,浪费了很多时间最后才发现是由于cmake编译gattlib生成so文件时,树莓派默认使用的python版本过高,应该选择低版本的python才能生成能正常运行的文件。
下面是步骤:
降级python版本
输入如下命令:
sudo apt-get install -y python2
可通过以下命令确定python2成功安装
python2 --version
因为树莓派一般默认使用python3,输入
python -V
结果一般都是python3.x.x,我们需要切换为2.x.x
切换python版本
我的办法是先给两个版本的python设定一个优先级
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 0
然后手动选择python版本:
sudo update-alternatives --config python
输入对应的序号即可
这里我选择python2 对应的序号1,回车
此时再次查看默认python版本
python -V
如果要换回python3的话也通过这个命令手动选择就行,并且建议在cmake完gattlib后就切换回python3。因为2020年1月1日起,Python 2 已经不再得到官方的技术支持和更新。这意味着,Python 2 不再接收安全更新和错误修复,也不再支持新功能的添加。
GATTLIB克隆
github官网网址:
https://github.com/labapart/gattlib.git
我这里用的是gitee国内镜像
git clone https://gitee.com/linchen/gattlib.git
我选择的下载位置是主目录下的Download文件夹
进入目录,就是一套连环输出,不过在此之前,应该先下载官方说的依赖避免后续问题
sudo apt install libbluetooth-dev libreadline-dev
然后
sudo mkdir build && cd build
cmake ..
make
忘了下cmake就下
sudo apt-get install -y cmake
然后
sudo cmake ..
如果没有问题的话应该是如下图
此时再make就大功告成:
在example文件下有例程,且在刚才已经编译好成为可执行文件了,这里直接运行一个扫描例程测试
成功
部分安装出错和解决方案
这里容易出现许多问题,我遇到的列举部分,希望有所帮助
——如果出现这种提示下载对应的依赖,按照提示下载即可
——如果出现这个错误
把libbluetooth3 remove了,然后重新直接下载libbluetooth-dev
——需要安装glib-2.0
——需要doxygen的话也是下载,不过要小写
切记在cmake时候要保证默认python版本是较低版本,否则编译出的文件不能运行。
建议先做好依赖项下载再cmake,如果cmake中途发现缺少依赖,下载对应依赖后,应该把原来的build文件夹删除,然后重新创建build文件夹,进入,再cmake
动态库添加到环境变量
在刚才cmake 和 make 的过程中我们已经生成了后面自己编写代码时所需要的文件,其中的一些动态库so文件需要我们添加到环境变量方便使用,也可以编译时指定位置
先找到so文件的路径
sudo find / -name libgattlib.so
找到后,复制到/usr/lib 下即可,以我的为例:
sudo cp /home/pi/Downloads/gattlib/build/dbus/libgattlib.so /usr/lib