c - 如何解决C中的类型冲突问题

标签 c header dbus

我正在尝试在自己的 C 程序中重用 BlueZ 代码来管理蓝牙连接并遇到编译问题。

当我进一步分析问题时,我认为正在发生的事情是:

这一切都取决于我的程序结构:

1.myadv.c includes myadv.h includes gio.h
2. myadv.c includes "gdbus.h" (Helper lib)

现在的问题是 gdbus.h 具有某些与 gio.h 中的内部定义冲突的符号定义(typedef、方法等...)

因此,我收到如下编译器错误:

/usr/include/glib-2.0/gio/gioenums.h:1383:3: error: conflicting types for ‘GDBusSignalFlags’
 } GDBusSignalFlags;
   ^~~~~~~~~~~~~~~~

conflicting types for ‘g_dbus_proxy_new’
 void             g_dbus_proxy_new  

在包含过程中避免此类符号冲突错误的最佳实践是什么?请注意,我需要使用两个头文件:

  1. gio.h(gnome 库)
  2. gdbus.h(直接从 BlueZ 借用的 dbus 助手)

最佳答案

不要使用gdbus.h from BlueZ 。它与 GLib 不兼容,但错误地使用了 GLib 符号命名空间(g_G 前缀)。

使用GDBus API from GLib itself ,因为您已经在项目中使用了 GLib/GIO。

关于c - 如何解决C中的类型冲突问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56360049/

相关文章:

c - 如何用等效的 strcat() 替换 memcpy() ?

检查浮点变量是否存在

javascript - 尝试在 header 中包含 js 脚本但没有成功

html - 当您将鼠标悬停在标题按钮上时,标题按钮会变大

PHPEXCEL设置UTF-8编码

linux - DBus.ObjectManager.GetManagedObjects 中缺少 LEAdvertisingManager1

python - 在 Python 中为 dbus 接口(interface)自动生成接口(interface)实现?

c - 去掉 "#include <math.h>"前面的注释破坏了我的代码

c - 期望 C 中的特定数据类型

c++ - 如何使用 cmake 启用 qt dbus 编码(marshal)处理?