如何重新编译现有 linux 应用程序

How to recompile an existing linux application

我正在寻找编辑和重新编译 bluez 5.31 版的 hcitool.c。我按照以下答案中的步骤安装了 bluez 5.31:

在我的试用中,我复制了 hcitool.c 文件并将其命名为 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':

我还尝试通过修改其中的简单 printf 来编辑 hcitool.c 本身,然后为整个 bluez 重做 'make' 和 'make install' 命令。之后,当我尝试运行 hcitool时,我所做的修改没有效果。

编译错误清楚地表明您缺少文件和目录,并且存在未定义的类型引用(因为您缺少文件)。您正在将文件复制到其目录之外并尝试编译它。这将不起作用,因为缺少正确编译所需的包含(以及更多)。

  • 如果您想直接编辑 hcitool,您应该下载 Bluez 源代码,将其解压,cd 放入其中,然后 ./configure。将生成 makefile,您可以使用 make 构建可执行文件。如果您对 hcitool.c 文件进行更改,您应该确保重新编译它并且 运行 它在目录中作为 ./hcitool 而不是一般的 hcitool 因为这会运行可执行文件安装到您的系统,而不是您编辑的系统。

  • 如果你想在 Bluez 目录之外构建它作为一种独立的,你将必须复制在 #include <x> 语句中定义的所有需要​​的文件和文件夹,并且为它们制作一个单独的 makefile,因为复制现有的 makefile 可能不起作用。

  • 如果您想向 Bluez 源添加新文件,请确保您还进行了正确的 Makefile 编辑,以便在编译期间包含它。

我想补充一点,hcitool 已经有很长时间没有维护了,并且即将被 Bluez 淘汰,所以也许您应该采取完全不同的方法!