天天看點

gtk編譯找不到gtk/gtk.h頭檔案

版本為centos7 + gtk3.0

初次使用:gg.c:

#include“gtk/gtk.h”//因為尖括号在新浪不顯示,是以改為了引号 


int main (int   argc, char *argv[])

{


      GtkWidget *window;


      gtk_init (&argc, &argv);

   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

   gtk_window_set_title (GTK_WINDOW (window), "Window");

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


      gtk_widget_show (window);


      gtk_main ();
    

        return 0;

}      

編譯:

gcc -o gg gg.c

報錯

gg.c:1:22: 錯誤:gtk/gtk.h:沒有那個檔案或目錄

gg.c: 在函數‘main’中:

gg.c:4: 錯誤:‘GtkWidget’未聲明(在此函數内第一次使用)

gg.c:4: 錯誤:(即使在一個函數内多次出現,每個未聲明的辨別符在其

gg.c:4: 錯誤:所在的函數内也隻報告一次。)

gg.c:4: 錯誤:‘window’未聲明(在此函數内第一次使用)

gg.c:5: 錯誤:‘label’未聲明(在此函數内第一次使用)

gg.c:8: 錯誤:‘GTK_WINDOW_TOPLEVEL’未聲明(在此函數内第一次使用)

gg.c:11: 錯誤:‘gtk_main_quit’未聲明(在此函數内第一次使用)

gg.c:11: 錯誤:‘NULL’未聲明(在此函數内第一次使用)

去/usr/include目錄下會發現,gtk/gtk.h在gtk3.0目錄下,但是如果把包含頭檔案的語句改為#include"gtk-3.0/gtk/gtk.h" ,這樣錯誤更多了,因為gtk.h中包含了很多其他的檔案。

需要指定庫檔案,

一般來說,如果庫的頭檔案不在 /usr/include 目錄中,那麼在編譯的時候需要用 -I參數指定其路徑。由于同一個庫在不同系統上可能位于不同的目錄下,使用者安裝庫的時候也可以将庫安裝在不同的目錄下,是以即使使用同一個庫,由于庫的路徑的不同,造成了用 -I 參數指定的頭檔案的路徑也可能不同,其結果就是造成了編譯指令界面的不統一。如果使用 -L參數,也會造成連接配接界面的不統一。編譯和連接配接界面不統一會為庫的使用帶來麻煩。

     為了解決編譯和連接配接界面不統一的問題,人們找到了一些解決辦法。其基本思想就是:事先把庫的位置資訊等儲存起來,需要的時候再通過特定的工具将其中有用的資訊提取出來供編譯和連接配接使用。這樣,就可以做到編譯和連接配接界面的一緻性。其中,目前最為常用的庫資訊提取工具就是下面介紹的pkg-config。在預設情況下,每個支援pkg-config 的庫對應的 .pc 檔案在安裝後都位于安裝目錄中的 lib/pkgconfig 目錄下

cat /usr/local/spice-gtk/lib/pkgconfig/spice-client-gtk-3.0.pc

prefix=/usr/local/spice-gtk

exec_prefix=${prefix}

libdir=${exec_prefix}/lib

includedir=${prefix}/include

Name: spice-client-gtk-3.0

Description: SPICE Client Gtk 3.0 library

Version: 0.33

Requires:  gtk+-3.0 >= 3.12 spice-client-glib-2.0

Libs: -L${libdir} -lspice-client-gtk-3.0

Cflags: -I${includedir}/spice-client-gtk-3.0

使用 pkg-config 的 --cflags 參數可以給出在編譯時所需要的選項,而 --libs參數可以給出連接配接時的選項。

是以上面程式的編譯指令 應改為:

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

注意這個`

注意:程式中的頭檔案應該是:gtk/gtk.h,而非 gtk-2.0/gtk/gtk.h

這次終于編譯成功了

​​

gtk編譯找不到gtk/gtk.h頭檔案

​​