gtk編譯找不到gtk gtk h標頭檔案

2021-08-20 17:38:58 字數 1788 閱讀 5069

版本為centos7 + gtk3.0

初次使用:gg.c:

int main (int argc, char *argv)

編譯:

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=$

libdir=$/lib

includedir=$/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$ -lspice-client-gtk-3.0

cflags: -i$/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

這次終於編譯成功了

編譯QGC,提示 corecrt h 找不到

qt qcreator 新建乙個工程後出現 d program files x86 microsoft visual studio 14.0 vc include crtdefs.h 10 error c1083 無法開啟包括檔案 corecrt.h no such file or director...

編譯程式找不到mysql h

mysql.h 沒有那個檔案或者目錄 原 include修改後 include 或者 include 因為 usr inlcude 是gcc預設搜尋標頭檔案的乙個路徑 而 include下有乙個mysql目錄名與mysql.h命名空間相同,系統不再向下查詢。即如果mysql目錄不叫mysql 叫my...

編譯qt提示找不到gmake

在用debian編譯qt4.5的時候提示gmake not found,gmake是什麼東西,用aptitude搜了一下也沒結果,網上查了一下原來就是make。gmake是gnu make的縮寫。linux系統環境下的make就是gnu make,之所以有gmake,是因為在別的平台上,make一般...