Ошибка компиляции основного кода "libnotify" - PullRequest
1 голос
/ 25 февраля 2010
#include <libnotify/notify.h>
#include <glib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
    if(argc == 3)
    {
        NotifyNotification *n;
        notify_init("Test");
        n = notify_notification_new (argv[1],argv[2], NULL, NULL);
        notify_notification_set_timeout (n, 3000); //3 seconds
        if (!notify_notification_show (n, NULL)) {
            g_error("Failed to send notification.\n");
            return 1;
        }
        g_object_unref(G_OBJECT(n));
    }else{
        g_print("Too few arguments (%d), 2 needed.\n", argc-1);
    }
    return 0;
}

Компиляция кода дает мне "неопределенную ссылку на" Ошибка:

shadyabhi@shadyabhi-desktop:~/c$ gcc -Wall -o test libnotify.c `pkg-config --libs --cflags glib-2.0 gtk+-2.0`
/tmp/ccA2Q6xX.o: In function `main':
libnotify.c:(.text+0x20): undefined reference to `notify_init'
libnotify.c:(.text+0x4b): undefined reference to `notify_notification_new'
libnotify.c:(.text+0x60): undefined reference to `notify_notification_set_timeout'
libnotify.c:(.text+0x71): undefined reference to `notify_notification_show'
collect2: ld returned 1 exit status
shadyabhi@shadyabhi-desktop:~/c$

Я взял код из этого блога .

Ответы [ 2 ]

4 голосов
/ 25 февраля 2010

Звучит так, как будто вы забыли передать -lnotify для ссылки на libnotify.

0 голосов
/ 24 августа 2016

Я пока не могу комментировать, поэтому публикую это как ответ.

В комментарии к принятому вопросу Абхиджит Растоги спросил, как узнать, каким должен быть этот аргумент для gcc, и хотя Игнасио Васкес-Абрамс правильно упомянул pkg-config, здесь есть еще:

Этот магический "-lnotify" является флагом "-l" для компоновщика gcc, добавляемого с библиотекой, на которую вы хотите сослаться. При поиске в / usr / lib, есть файл с именем libnotify.so, и с "-lnotify" этот файл связывается с программой. Таким образом, для ссылки на библиотеку, найдите соответствующий файл библиотеки в / usr / lib, запишите имя файла, удалите «lib-» и расширение файла и добавьте его к «-l» -flag. Обратите внимание, что порядок ссылок важен, поэтому вы должны включать зависимости перед их зависимостями.

Теперь, если для библиотеки есть файл .pc, можно использовать строку типа

gcc `pkg-config --cflags --libs libnotify` main.c ...

для сборки программы. В моей системе вызов pkg-config расширяется до

-pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

так что нет необходимости явно иметь дело с зависимостями glib и gtk libnotify.

...