我正在尝试在自己的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
在收录过程中避免此类符号冲突错误的最佳实践是什么?请注意,我需要同时使用两个头文件:
答案 0 :(得分:0)
请勿使用gdbus.h
from BlueZ。它与GLib不兼容,但错误地使用了GLib符号命名空间(g_
或G
前缀)。
使用GDBus API from GLib itself,就好像您已经在项目中使用GLib / GIO一样。