2009-06-24 55 views
4

我試圖建立使用GTK,它包括一個線的hello world:頭文件(例如GTK/gtk.h VS GTK-2.0/GTK/gtk.h)

#include <gtk/gtk.h> 

如你會期待的。

的Makefile文件提供有行:

GTK_INCLUDE = -I/usr/local/include 

所以希望找到gtk.h在/usr/local/include/gtk/gtk.h。但是在我的系統中,它位於/usr/local/include/gtk-2.0/gtk/gtk.h中,即在版本的子目錄中。

顯然在這種情況下,我可以在Makefile中添加-I/usr/local/include/gtk-2.0,但同樣的問題也會影響gtk.h的依賴關係等等。

有沒有處理這個問題的好方法?可以使用configure來定位頭文件的位置並添加相應的include目錄嗎?我幾乎不知道配置,但似乎在構建時發現了系統的一些事情,這正是我所追求的。

這是一個常見的發生或我有一些怪胎目錄結構這是真正的問題?

感謝您的指點!

+0

重複:http://stackoverflow.com/questions/510098 – ephemient 2009-06-25 02:01:57

回答

8

您需要使用pkg-config獲得包括路徑:

$ pkg-config --cflags gtk+-2.0 
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 

你也必須使用它來獲取庫:

$ pkg-config --libs gtk+-2.0 
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 

(在這些命令的輸出會有所不同您的分配,並將永遠是您的分配正確的。)

+0

謝謝,這看起來像我之後 - 我認識到其他一些包括你的pkg-config示例創建(像pango)需要一個更具體的包含目錄。 – Ray2k 2009-06-25 06:04:06

4

也許,你必須創建一個類似的符號鏈接:

ln -s /usr/local/include/gtk /usr/local/include/gtk-2.0 

,但是你可以先嚐試重新安裝GTK包。

+1

我曾想過這個,但它沒有eem做正確的事情,特別是考慮其他所有需要以相同方式改變的事情。 – Ray2k 2009-06-25 05:59:25

2

我很久沒有使用過gtk了,但是這種方式在Linux中通常處理的方式是有一個名爲packagename-config(在這種情況下,可能是gtk-config)的腳本,它附帶了開發頭文件,你的makefile應該調用這個函數,以便分別使用--cflags和--libs來獲得包的正確包含路徑和鏈接器標誌。

所以嘗試像

GTK_INCLUDE=`gtk-config --cflags` 

(請注意使用反引號,而不是單引號)

而且你可能也想的gtk-config --libs輸出添加到您的LDFLAGS,以確保您鏈接所有正確的東西。

+1

很久以前,AFAIR,gtk-config已經被通用的pkg-config所取代(正如packagename-config樣式腳本的大部分其他用法一樣)。 – CesarB 2009-06-24 22:51:00