我正在尝试在自己的 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
在包含过程中避免此类符号冲突错误的最佳实践是什么?请注意,我需要使用两个头文件:
- gio.h(gnome 库)
- 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/