2010-02-24 3 views
1
#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; 
} 

compilant le code me donne "undefined reference to" erreur:Erreur compilation BASIC "libnotify" Code

[email protected]:~/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 
[email protected]:~/c$ 

Je pris le code de cette blog.

Répondre

4

On dirait que vous avez oublié de passer -lnotify pour lier réellement à libnotify.

+0

ok. thanx..Parfait. Mais comment saurai-je que je dois passer "-nnotify" comme argument à gcc? Je veux dire le nom exact .. –

+0

Si une bibliothèque vient avec un fichier '.pc', vous pouvez interroger' pkg-config' pour savoir quels arguments vous devez passer. –

0

Je ne peux pas encore commenter, donc je poste ceci comme réponse.

Dans un commentaire à la question acceptée, Abhijeet Rastogi a demandé comment savoir ce que cet argument à gcc devrait être, et alors que Ignacio Vazquez-Abrams mentionné correctement pkg-config il y a plus:

Cette magie « -lnotify "est le drapeau" -l "à l'éditeur de liens de gcc ajouté à la bibliothèque que vous souhaitez lier. Quand vous regardez dans/usr/lib, il y a un fichier nommé libnotify.so et avec "-lnotify" ce fichier est lié au programme. Donc, pour lier à une bibliothèque, recherchez le fichier de bibliothèque respectif dans/usr/lib, notez le nom de fichier, supprimez le "lib-" et l'extension de fichier et ajoutez-le au "-l" -flag. Notez que l'ordre des liens est important, vous devez donc inclure les dépendances avant leurs dépendants.

Maintenant, s'il y a un fichier .pc pour la bibliothèque, on peut utiliser une ligne comme

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

pour construire le programme. Sur mon système, l'appel à pkg-config se développe pour

-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 

donc il n'y a pas besoin de traiter explicitement les dépendances désinvoltes et gtk de libnotify.