【问题标题】:What is the gdbus library name? Technique to find it?gdbus 库名称是什么?找到它的技术?
【发布时间】:2016-09-26 11:50:16
【问题描述】:

我需要包含什么库才能使用 Bluez gdbus.h 函数?对于gdbus.h 函数,我收到很多undefined reference 错误,所以我显然缺少一个库。

*有没有办法(在终端或其他方式)我可以找出头文件使用的库?例如;我可以使用locate gdbus.h 找到头文件所在的位置。有没有办法找出gdbus.h 需要什么库?

我现在的pkg-config是:

pkg-config --cflags gio-2.0 dbus-glib-1 dbus-1 glib-2.0 gthread-2.0
pkg-config --libs gio-2.0 dbus-glib-1 dbus-1 glib-2.0 gthread-2.0

这样我得到了许多未定义的引用,例如:

agent.c:100:未定义对“g_dbus_send_reply”的引用
agent.c:104:未定义对“g_dbus_send_reply”的引用
agent.c:107: 未定义对“g_dbus_send_error”的引用

我错过了什么库?

【问题讨论】:

  • 那些带有gio-2.0pkg-config 命令的输出是什么?
  • @ChronoKitsune 如果我自己使用gio-2.0,我会收到编译错误fatal error: gdbus/gdbus.h: No such file or directory
  • 您是如何安装 BlueZ 的? GDBus 不是来自 DBus,它是由 BlueZ 开发人员 IIRC 编写的文件,用于提供帮助器/包装器功能。在标题中你可以清楚地看到它依赖于 glib.h 和 dbus/dbus.h。 glib 来自 GIO iirc。 Gdbus.h 位于 BlueZ 的源代码中。不在包中的任何地方。
  • 顺便说一句,这就是你要找的东西。 git.kernel.org/cgit/bluetooth/bluez.git/tree/gdbus

标签: c linux glib


【解决方案1】:

gdbus 函数是 gio 库的一部分,所以 gio-2.0 包就是您想要的。

找不到gdbus/gdbus.h 的原因是它不存在。我什至没有提供gdbus.h 的软件包,更不用说gdbus/gdbus.h。要包含的正确文件是gio/gio.h,它将包含整个 gio 库的所有必要头文件,包括 gdbus 的 22 个。

摆脱dbus-glib-1;它已被弃用(支持 gdbus)。如果您的代码使用 gdbus,则不太可能还需要 dbus-glib。

【讨论】:

  • gdbus/gdbus.h 在 BlueZ 源代码中,而不是在包中。它确实存在。
【解决方案2】:

gbdus.h位于BlueZ用户空间源代码中,为了使用,应该是downloaded并且可以编译。

http://git.kernel.org/cgit/bluetooth/bluez.git/tree/gdbus

上面的链接指向您在此用户空间包的源中查找的文件夹。头文件也在里面。文件结构对应于你应该下载的用户空间源代码的结构。从那里您可以包含您丢失的文件。

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2020-03-26
    • 2019-08-20
    • 2012-01-19
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多