如何解决C语言中的冲突类型问题

时间:2019-05-29 11:55:38

标签: c header dbus

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

当我进一步分析问题时,这是我想发生的事情:

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

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

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

因此,我得到了这样的编译器错误:

/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帮助程序)

1 个答案:

答案 0 :(得分:0)

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

使用GDBus API from GLib itself,就好像您已经在项目中使用GLib / GIO一样。