Компиляция C-программы с заголовочными файлами dbus - PullRequest
6 голосов
/ 22 апреля 2011

Я пытаюсь скомпилировать программу на C с этими заголовками: http://pastebin.com/SppCXb0U в Ubuntu. Сначала мне совсем не повезло, но после прочтения pkg-config я создал следующую строку:

gcc `pkg-config --cflags --libs dbus-1` `pkg-config --cflags --libs glib-2.0` signals-tutorial.c

Однако, это все еще не работает и выдает мне эту ошибку:

/tmp/cc3BkbdA.o: In function `filter_example':
signals-tutorial.c:(.text+0x1a3): undefined reference to `dbus_connection_setup_with_g_main'
/tmp/cc3BkbdA.o: In function `proxy_example':
signals-tutorial.c:(.text+0x29a): undefined reference to `g_type_init'
signals-tutorial.c:(.text+0x2b3): undefined reference to `dbus_g_bus_get'
signals-tutorial.c:(.text+0x323): undefined reference to `dbus_g_proxy_new_for_name'
signals-tutorial.c:(.text+0x369): undefined reference to `dbus_g_proxy_add_signal'
signals-tutorial.c:(.text+0x38a): undefined reference to `dbus_g_proxy_connect_signal'
collect2: ld returned 1 exit status

Я не уверен, что делать отсюда.

==================================

Хорошее объяснение - спасибо. Тем не менее, я не могу заставить его работать. Выполнение команды выше (с добавлением) дает следующий результат

gcc `pkg-config --cflags dbus-1` \
>     `pkg-config --cflags glib-2.0` \
>     signals-tutorial.c \
>     `pkg-config --libs dbus-1` \
>     `pkg-config --libs glib-2.0`
/tmp/ccjN0QMh.o: In function `filter_example':
signals-tutorial.c:(.text+0x1a3): undefined reference to `dbus_connection_setup_with_g_main'
/tmp/ccjN0QMh.o: In function `proxy_example':
signals-tutorial.c:(.text+0x29a): undefined reference to `g_type_init'
signals-tutorial.c:(.text+0x2b3): undefined reference to `dbus_g_bus_get'
signals-tutorial.c:(.text+0x323): undefined reference to `dbus_g_proxy_new_for_name'
signals-tutorial.c:(.text+0x369): undefined reference to `dbus_g_proxy_add_signal'
signals-tutorial.c:(.text+0x38a): undefined reference to `dbus_g_proxy_connect_signal'
collect2: ld returned 1 exit status

1 Ответ

12 голосов
/ 22 апреля 2011

Ваша проблема не с заголовочными файлами, ваша проблема с библиотеками;жалобы на "неопределенные ссылки" обычно исходят от компоновщика.Вам нужно поставить параметры конфигурации библиотеки после исходного файла:

gcc `pkg-config --cflags dbus-glib-1` \
    `pkg-config --cflags dbus-1` \
    `pkg-config --cflags glib-2.0` \
    signals-tutorial.c \
    `pkg-config --libs dbus-glib-1` \
    `pkg-config --libs dbus-1` \
    `pkg-config --libs glib-2.0`

Опция --libs создаст серию -l флагов для компилятора, компилятор пройдетте к компоновщику.Компоновщик будет преобразовывать символы слева направо, начиная с объектного файла (или, в этом случае, достаточно близко, исходного файла C), поэтому все переключатели библиотеки -l должны следовать вашему исходному файлу.

...