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头文件








  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值