#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$
我从这个blog获取了代码。
答案 0 :(得分:4)
听起来你忘了传递-lnotify
实际链接到libnotify。
答案 1 :(得分:0)
我还不能发表评论,所以我将其作为答案发布。
在对已接受的问题的评论中,Abhijeet Rastogi询问如何知道gcc的论点应该是什么,而Ignacio Vazquez-Abrams正确地提到了pkg-config还有更多:
这个神奇的“-lnotify”是gcc链接器的“-l”标志,附加了你想要链接的库。查看/ 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
所以不需要显式处理libnotify的glib和gtk依赖。