2011-11-16 113 views
-1

因此,我很高興在Ubuntu 11.04中學習了3.0的GTK +編程,甚至還有一個工作的標尺程序正在運行。它完美地編譯了我的makefile。GTK3程序不再編譯 - 鏈接時GCC「未定義參考」

我花了一些時間,升級到11.10,現在又回來了。但是,可惜的是,當我嘗試構建該程序時,在我的程序中幾乎每個gtk調用都會遇到很多「未定義的引用」錯誤。編譯很好 - 問題出現在鏈接時。

該項目可以在這裏找到:https://github.com/zjmichen/ruler

+0

問題的外部鏈接不再有效,所以問題沒有用。 –

回答

1

我測試過了,它編譯得很好。

[email protected] ~/work/zjmichen-ruler-e783fe1 $ make 
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` main.c 
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` window.c 
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` graphics.c 
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` mouse.c 
gcc `pkg-config --cflags --libs gtk+-3.0` main.o window.o graphics.o mouse.o -o zruler 
[email protected] ~/work/zjmichen-ruler-e783fe1 $ 

但是這是在Linux Mint上。在這裏,你已經得到了通過pkg配置

-pthread -DGSEAL_ENABLE -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gtk-3.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pixman-1 -pthread -L/usr/lib/x86_64-linux-gnu -lgtk-3 -lgdk-3 -latk-1.0 -lcairo-gobject -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lm -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 

我還沒有在Ubuntu 11.10進行快速測試,事實上它並沒有產生編譯參數。今晚我會好好看看。

所以,我沒有測試它在Ubuntu和改線14在生成文件

$(CC) $(OBJS) $(GTKFLAGS) -o $(NAME) 

這改變正在鏈接的對象文件和庫的順序。我不知道爲什麼這個問題發生在新的Ubuntu上。也許這是因爲它是一個不同版本的gcc。在我的linux mint gcc上是ubuntu 11.10上的版本4.5.2,它是4.6.1

+0

ahh擰緊。首先嚐試makefile ... –

+0

爲什麼要將pkg-config的--libs輸出提供給編譯,將--cflags提供給鏈接階段?這不是很好的風格和教育 – Lothar

0

不幸的是我目前還沒有進入安裝運行Linux機器GTK3.0,而是看你的代碼,我發現X11/xlib.h列入在main.c中。既然你沒有在你的代碼的任何地方使用X11代碼,並且你正在使用'pkgconfig ... gtk + -3.0'而不是gtk + -X11-3.0,我假設你可以刪除包含語句。如果您確實需要X11庫,請確保它在編譯器標誌中列出。我希望這有助於:)

+0

感謝您花時間檢查它 - 我包含X11(至少在window.c中)的原因是要查找光標位置,即使它不在窗口中。我找不到Gtk的功能,但如果你知道更好的方法來做到這一點,我將不勝感激。當然,這是一個不同的問題。 無論如何,儘管消除了這種依賴關係,問題仍然存在。 –