gcc如何自动知道包含glib库

时间:2014-02-05 11:44:16

标签: c linux gcc ubuntu-12.04 glibc

我在C中创建使用glib.h的简单程序,但是当我编译它时会出现如下错误:

$ gcc test.c -o test
test.c:3:18: fatal error: glib.h: No such file or directory
compilation terminated.

所以从上面看来,gcc似乎找不到glib.h文件(它是libglib2.0-dev包的一部分,并且已经安装了它)。首先,我尝试在我的系统中找到glib.h个文件,并找到如下输出:

$ locate glib.h
/usr/src/linux-headers-3.2.0-29-generic-pae/include/config/blk/dev/bsglib.h
/usr/src/linux-headers-3.2.0-48-generic-pae/include/config/blk/dev/bsglib.h
/usr/src/linux-headers-3.2.0-57-generic-pae/include/config/blk/dev/bsglib.h

然后我尝试了命令:

$ pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include  

为GCC获取正确的标志但仍显示相同的错误。

因此,尝试从SO中找到解决方案并找到类似

的精确解决方案
$ gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0`

这个命令解决了我的问题

但我有疑问,是不是要告诉gcc包含glib库,所以不需要在pkg-config --cflags --libs glib-2.0之后给出标记gcc,只是我按gcc test.c -o test编译我的文件? / p>

1 个答案:

答案 0 :(得分:4)

没有

查看C源代码并确定它使用哪些库的问题非常困难。这对我来说感觉有点"AI complete",这就是为什么它通常由程序员手动解决,指出确切的正确的库来满足依赖性。

只是为了搞笑,很容易想象安装了glib 1.x和2.x版本的系统,并且有些调用的名称完全相同。现在试着想象一个计算机程序能够破坏你的意思,链接哪个库。这是不可能的,因为只有程序员知道。

pkg-config工具有助于了解每个库所需的机制以便使用,但它仍然可以告诉它(通过模块名称参数)哪些要使用的确切库。