2012-02-24 17 views
4

我發現很多例子各種GTK使用在網絡上,但他們大多包含包含的頭的Gtk找不到「<config.h>」

#include <config.h> 

,我不能無處FINT這個頭,所以我不能讓這些例子工作。

這是怎麼回事?
我可以採取什麼或用什麼我可以取代這個頭?
或者我可以配置不同的文件/項目,讓他們工作,因爲其他gtk項目在我的comp上工作?

目前我試圖在編譯期間編譯套接字示例testsocket.c和 我得到錯誤未定義引用'create_child_plug'。除了在這個頭文件中,我沒有看到任何理由不能工作。
但無論如何,我可能是錯的。

+0

你能提供有關您的系統環境的信息嗎? – summea 2012-02-24 23:57:55

+0

當然。 Ubuntu 10.04/64,Gtk2。 – 2012-02-25 00:21:52

+1

這可能是類似這樣的問題:http://stackoverflow.com/questions/1041059/header-files-in-subdirectories-eg-gtk-gtk-h-vs-gtk-2-0-gtk-gtk-h – summea 2012-02-25 00:38:28

回答

7

我認爲你正在嘗試編譯一個單獨的源文件,而這個文件本身並不適用。兩個原因。

第一個原因:config.h是Autoconf輸出的包含平臺特定定義的頭文件的默認名稱。這就是爲什麼你不能在任何地方找到它的原因 - 它是在你的項目上運行./configure時產生的,其內容取決於你的系統配置。所以它不會被包含在任何項目中,你必須使用Autoconf自己生成它。或者只是註釋掉#include <config.h>並查看缺少哪些定義,然後自己定義它們。

的另一個原因:

目前我嘗試編譯插座例如testsocket.c和編譯過程中出現了錯誤未定義參考「create_child_plug」。除了在這個頭文件中,我沒有看到任何理由不能工作。 但無論如何,我可能是錯的。

事實上,該文件包含的create_child_plug一個定義:

extern guint32 create_child_plug (guint32 xid, gboolean local); 

所以,問題不在於create_child_plug沒有定義。你不需要一個頭文件,它就在源文件中定義。 extern表示此函數的實際代碼位於不同的源文件中。在這種情況下,您將獲得鏈接時(而不是編譯時)錯誤,因爲鏈接程序找不到該函數的任何代碼。你應該看它在.c文件,而不是一個.h文件和編譯代碼了。

我建議你下載整個GTK源代碼和編譯,並運行從那裏測試程序,而不是選擇單獨的源文件斷網。

+0

嗯,你是絕對正確的,我很困惑帶來遺憾。還不能夠通過mysqlf編譯整個gtk,但在某些時候我肯定會。因爲使用gtk我仍然在與C編程戰鬥(如你所見)。而錯過的函數正好在其他(extern)文件中,我認爲這個問題在config.h中是錯誤的(並且不是)。感謝您的幫助。 – 2012-02-25 22:28:02

0

實際上,GTK +目錄中沒有標題爲config.h。然而,我見過很多人用類似你們在論壇等方面的問題你可能要找的就是其中之一:

  • fontconfig.h
  • glibconfig.h
  • gdkconfig。 ħ
  • ftconfig.h

這些位於:

  • include/fontconfig/
  • lib/glib-2.0/include
  • lib/gdk-2.0/include
  • include/freetype2/freetype/config

另外,你確定你已經添加了所有必需的目錄你的編譯器包含路徑? 在Ubuntu上很容易,只需要一個pkg-config gtk+-2.0

+0

嗨,國際米蘭,感謝您的幫助,但錯誤是不同的性質。當我們說讓我告訴你,我在我的編譯器這些設置:'pkg配置GTK + -2.0 --cflags'和鏈接:'pkg配置GTK + -2.0 --libs'。通過「默認」安裝這一切在GTK中工作正常。但是你知道我應該如何設置這些參數,以便只使用glib庫而不需要整個gtk? – 2012-02-25 22:33:50