我正在编辑和重新编译Bluez5.31版的hcitool.c。我按照下面的步骤安装了Bluez5.31:
Bluetooth Low Energy in C - using Bluez to create a GATT server
在我的试验中,我复制了hcitool.c文件,并在tools文件夹中将其命名为myhcitool.c,然后使用命令
gcc -o myhcitool.o myhcitool.c.
这给了我一个错误
myhcitool.c:43:27: fatal error: lib/bluetooth.h: No such file or directory
#include "lib/bluetooth.h"
^
compilation terminated.
我试着把myhcitool.c复制到tools文件夹外,然后在那里编译它。这让我犯了一堆类似的错误:
/tmp/ccj1QmZK.o: In function `dev_info':
myhcitool.c:(.text+0x293): undefined reference to `ba2str'
/tmp/ccj1QmZK.o: In function `conn_list':
myhcitool.c:(.text+0x501): undefined reference to `ba2str'
myhcitool.c:(.text+0x50f): undefined reference to `hci_lmtostr'
myhcitool.c:(.text+0x586): undefined reference to `bt_free'
/tmp/ccj1QmZK.o: In function `cmd_dev':
我还尝试编辑hcitool.c本身,方法是修改其中的一个简单printf,然后对整个bluez重新执行make和make install命令。之后,当我尝试运行hcitool时,我所做的修改没有效果。
最佳答案
编译错误清楚地表明您丢失了文件和目录,并且存在对类型的未定义引用(因为您丢失了文件)。您正在将文件复制到其目录之外并尝试编译它。由于缺少正确编译所需的include(及更多),这将不起作用。
如果你想直接编辑hcitool,你应该下载Bluez源代码,将其解压,cd
并./configure
到其中。生成生成文件,您可以使用make
构建可执行文件。如果对hcitool.c文件进行了更改,则应确保重新编译该文件,并在目录中以./hcitool
的形式运行,而不是像运行安装到系统中的可执行文件(而不是您编辑的可执行文件)那样运行。
如果您想将它作为一种独立的方式构建在Buez目录之外,则必须复制在需要的hcitool
语句中定义的所有文件和文件夹,并为这些文件创建单独的Mag文件,因为复制现有的文件可能不起作用。
如果要向Bluez源添加新文件,请确保还进行了正确的make file编辑,以便在编译过程中包含该文件。
我想补充的是,#include <x>
已经很久没有被维护了,并且正在逐步淘汰Bluez,所以也许你应该采取一种完全不同的方法!