2009-07-17 92 views
41

因此,這裏是世界上最簡單巧舌如簧程序:爲什麼我不能爲glib構建「hello world」?

#include <glib.h> 

我嘗試用gcc test.c編譯它,我也得到:

test.c:1:18: error: glib.h: No such file or directory 

所以我要確保我有合適的包:

# dpkg -l | grep libglib 
ii libglib-perl        1:1.183-1        Perl interface to the GLib and GObject libra 
ii libglib1.2-dev       1.2.10-19build1       The GLib library of C routines (development) 
ii libglib1.2ldbl       1.2.10-19build1       The GLib library of C routines 
ii libglib2.0-0        2.20.1-0ubuntu2       The GLib library of C routines 
ii libglib2.0-cil       2.12.1-1ubuntu2       CLI binding for the GLib utility library 2.1 
ii libglib2.0-data       2.18.2-0ubuntu2       Common files for GLib library 
ii libglib2.0-dev       2.20.1-0ubuntu2       Development files for the GLib library 
ii libglibmm-2.4-1c2a      2.18.1-1        C++ wrapper for the GLib toolkit (shared lib 

然後我在/ usr/include下的任何地方搜索任何「glib.h」。我得到了兩個,/usr/include/glib-1.2/glib.h和/usr/include/glib-2.0/glib.h。所以我嘗試:

$ gcc -I/usr/include/glib-2.0 -Wall test.c 
In file included from /usr/include/glib-2.0/glib/galloca.h:34, 
      from /usr/include/glib-2.0/glib.h:32, 
      from test.c:2: 
/usr/include/glib-2.0/glib/gtypes.h:34:24: error: glibconfig.h: No such file or directory 

(約10000剪斷更多的錯誤)

我不似乎有一個glibconfig.h我的電腦上的任何地方。

現在我該怎麼辦?

+1

也許我只是很傻,但你爲什麼要編譯頭文件? – GManNickG 2009-07-17 22:47:28

+14

我從一個更復雜的程序開始,但如果「#include 」不起作用,什麼都不會。 – mike 2009-07-17 22:55:40

+0

如果你沒有主要功能,它將*不*工作。用`stdio.h`代替`glib.h`也不起作用。假設你有一個主函數,正確的答案是使用`pkg-config`,如其他答案中所述。 – 2012-08-13 09:39:53

回答

49

glib傾向於隱藏自己...您的include語句不起作用,因爲GCC不會自動搜索子目錄,所以在glib-1.2或glib-2.0中看不到glib.h。

閱讀GLIB手冊中的Compiling GLib Applications頁面...使用pkg-config --cflags glib-2.0等命令獲取GCC的正確標誌。

的規範的方式做你正在嘗試的是

% gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

注意背蜱,它告訴shell運行「就地」在pkg-config命令。

+3

這不是隱藏的:glibconfig.h是依賴於數據庫的數據列表,因此不屬於/ usr/include。它常見於/ usr/lib/glib2/... – ntd 2012-10-13 18:05:18

-2

apt-get build-dep是你的朋友 - 沒有人能記得你需要建立一些東西的所有包。

40
> > The canonical way to do what you are trying is 

> % gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

對不起,但沒有。這是一種常見的誤解,在大多數情況下,在基於ELF的系統(尤其是Linux)中正常工作。該規範的辦法就是在CFLAGS和庫通過單獨,在命令行上的正確和傳統的地方,像這樣:

gcc -Wall -o test `pkg-config --cflags glib-2.0` test.c `pkg-config --libs glib-2.0` 

這是pkg配置同時接受了--cflags和遺憾 - -libs選項,因爲這意味着這個不正確的meme將永遠不會死亡,並且在Linux上人們習慣使用它的時候,當他們在其他平臺上嘗試使用它時仍然會感到困惑。

7

正如@克里斯說,使用pkg配置

glibconfig.h is missing 

這是因爲這個文件是不是在/usr/include/glib-2.0,但在/usr/lib/glib-2.0.所以,你必須也包括這個/usr/lib路徑或將文件複製到包括/油嘴-2.0

0

我使用glib.h作爲良好 這樣做是爲了編譯你的所有glib.h程序:)

gcc pkg-config --cflags --libs glib-2.0 filename.c

確保環繞pkg-config --cflags --libs glib-2。0,你可以在代字號下找到後引號 (在querty鍵盤上留下最多的鍵)。

謝謝我以後..:P

相關問題