我在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>
答案 0 :(得分:4)
没有
查看C源代码并确定它使用哪些库的问题非常困难。这对我来说感觉有点"AI complete",这就是为什么它通常由程序员手动解决,指出确切的正确的库来满足依赖性。
只是为了搞笑,很容易想象安装了glib 1.x和2.x版本的系统,并且有些调用的名称完全相同。现在试着想象一个计算机程序能够破坏你的意思,链接哪个库。这是不可能的,因为只有程序员知道。
pkg-config
工具有助于了解每个库所需的机制以便使用,但它仍然可以告诉它(通过模块名称参数)哪些要使用的确切库。