如何重新编译现有 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 淘汰,所以也许您应该采取完全不同的方法!
我正在寻找编辑和重新编译 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 淘汰,所以也许您应该采取完全不同的方法!