解決新版GTK3編譯時的錯誤: undefined reference to `gtk_init'


現在已經進入GTK3的時代很久了,最近了解了一下Ubuntu的相關開發技術,在其開發社區發現了一款不錯的開發工具,quickly,感興趣的朋友可以參考官方教程進行嘗試:

http://developer.ubuntu.com/get-started/

該quickly開發套件使用了pygtk來做界面的整合,無意中就去了解了一下gtk3的相關文檔,在編譯其最基本的例子的時候卻出現了錯誤:

教程網址:http://developer.gnome.org/gtk3/stable/gtk-getting-started.html

開發一個最簡單的程序,名為: window-default.c,代碼如下:

#include <gtk/gtk.h>

int
main (int   argc,
char *argv[])
{
  GtkWidget *window;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

  gtk_widget_show (window);

  gtk_main ();

  return 0;
}

顯示效果應該是:

可是進行編譯的時候卻出問題了:

$gcc `pkg-config --cflags  --libs gtk+-3.0` window-default.c/tmp/ccvouAR6.o: In function `main':
window-default.c:(.text+0x17): undefined reference to `gtk_init'
window-default.c:(.text+0x23): undefined reference to `gtk_window_new'
window-default.c:(.text+0x47): undefined reference to `gtk_main_quit'
window-default.c:(.text+0x5b): undefined reference to `g_signal_connect_data'
window-default.c:(.text+0x67): undefined reference to `gtk_widget_show'
window-default.c:(.text+0x6c): undefined reference to `gtk_main'
collect2: ld returned 1 exit status

然后嘗試了內容檢測和相應庫的檢查:

$echo `pkg-config --cflags gtk+-3.0` `pkg-config --libs gtk+-3.0`
-pthread -I/usr/include/gtk-3.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng12 -lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0
#以上內容說明庫的路徑是OK的,下面再次編譯也報錯
$gcc `pkg-config --cflags gtk+-3.0` `pkg-config --libs gtk+-3.0` window-default.c
/tmp/cc2wRBJp.o: In function `main':
window-default.c:(.text+0x17): undefined reference to `gtk_init'
window-default.c:(.text+0x23): undefined reference to `gtk_window_new'
window-default.c:(.text+0x47): undefined reference to `gtk_main_quit'
window-default.c:(.text+0x5b): undefined reference to `g_signal_connect_data'
window-default.c:(.text+0x67): undefined reference to `gtk_widget_show'
window-default.c:(.text+0x6c): undefined reference to `gtk_main'
collect2: ld returned 1 exit status

使用命令刷新了動態鏈接庫的路徑也不行:

sudo ldconfig

最后按照官方文檔,調換了編譯命令的順序,居然一點問題也沒有的通過了!!!

gcc `pkg-config --cflags gtk+-3.0` -o window-default window-default.c `pkg-config --libs gtk+-3.0`

只是將待編譯的文件放在中間就能夠編譯通過了!!! 真是奇跡!

$gcc `pkg-config --cflags gtk+-3.0` -o window-default  window-default.c `pkg-config --libs gtk+-3.0`
qunengrong@qunengrong-Studio-1450 /media/GoldenResources/PracticePark/gtk+/gtk3/basics

$
ls window-default window-default.c

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM