Как решить проблему конфликтующих типов в C - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь повторно использовать код BlueZ в моей собственной программе на C для управления Bluetooth-соединением и возникновения проблем с компиляцией.

Когда я проанализировал проблему, я понял, что происходит:

Все зависит от структуры моей программы:

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

Теперь проблема в том, что gdbus.h имеет определенные определения символов (typedef, методы и т. Д.), Которые конфликтуют с внутренними определениями в gio.h

Из-за этого я получаю такие ошибки компилятора:

/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 (The gnome lib)
  2. gdbus.h (помощник dbus напрямую позаимствован у BlueZ)

1 Ответ

0 голосов
/ 29 мая 2019

Не используйте gdbus.h от BlueZ . Он не совместим с GLib, но по ошибке использует пространство имен символов GLib (префикс g_ или G).

Используйте GDBus API из самой GLib , поскольку вы уже используете GLib / GIO в своем проекте.

...