文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>pkg-config

pkg-config

时间:2010-07-15  来源:ou_yang23

昨天按照参考书上的例子敲了一个最简单的GTK+的程序base.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_widget_show(window);
  gtk_main();
  return FALSE;
}
然后用命令行直接编译:
$ gcc -o base base.c 'pkg-config --cflags --libs gtk+-2.0'
可是出现了如下错误:
gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
base.c:1:21: gtk/gtk.h: 没有那个文件或目录
base.c: In function `main':
base.c:4: error: `GtkWidget' undeclared (first use in this function)
base.c:4: error: (Each undeclared identifier is reported only once
base.c:4: error: for each function it appears in.)
base.c:4: error: `window' undeclared (first use in this function)
base.c:6: error: `GTK_WINDOW_TOPLEVEL' undeclared (first use in this function)
base.c:9: error: `FALSE' undeclared (first use in this function)
百思不得其解,以为没装gtk,下载了gkt重新安装,还是不行.在网上搜索了大半天,终于发现问题所在:
$ gcc -o base base.c 'pkg-config --cflags --libs gtk+-2.0'
问题出现在那两个单引号上! 不是键盘上分号旁边的那个单引号,而是数字1左边,Tab键上边的那 个符号.
正确的书写如下:
$ gcc -o base base.c `pkg-config --cflags --libs gtk+-2.0`
这样子就可以编译通过了.

在GTK+2.0 FAQ 4.3中对此有叙述:
http://www.huihoo.com/gnu/gtk+_FAQ/GTK+_FAQ.htm

4.3. 我尝试编译一个小型的Hello World程序,但是失败了,有什么线索? [GTK 2.x]

我尝试编译一个小型的Hello World程序,但是失败了,有什么线索? [GTK 2.x]

既然你很擅长编程,我们在这里将不会讨论编译时间错误(compile time error).

传统的编译GTK+程序的命令是:

gcc -o myprog [c files] `pkg-config gtk+-2.0 --cflags --libs`

你应该注意到命令中使用的后置引用(backquote),一个普通的错误是:当你编译GTK+的程序时,使用了引用(quote),而不是后置引用(backquotes),如果这样,编译器会告诉:一个未知的文件名为:pkg-config gtk+-2.0 --cflags --libs,后置引用(backquote)是一条shell的指令,代替命令行中执行这条命令的输出.

...........

其中所说的'后置引用'就是Tab键上边那个符号,'引用 '就是分号旁边那个单引号.但是我第一次看的时候确实不知所云.可能linux基础知识太贫乏的缘故吧.

另外,为了避免每次编译都在终端 上输入gcc.....那一长串命令,可以使用linux提供的make工具.步骤如下:
假设base.c在base目录下,同样在base目录 下编辑建立新文件makefile或者Makefile:
$ vi makefile
按i键,然后输入如下代码:
CC = gcc
all:
    $(CC) -o base base.c `pkg-config --cflags --libs gtk+-2.0`
注意$(CC)前边不是空格,而是一个Tab键,引用使用的是Tab键上边那个'后向引用'符号,按 Esc,输入:wq退出到base目录下.输入
$ make
编 译成功后,输入
$ ./base
就会出现最 简单的那个窗口啦!
相关阅读 更多 +
排行榜 更多 +
<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />

<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />

飞行射击 下载
<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />

<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />

飞行射击 下载
<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />

<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />

飞行射击 下载