所以这是世界上最简单的glib程序:
#include <glib.h>
Run Code Online (Sandbox Code Playgroud)
我尝试编译它,gcc test.c我得到:
test.c:1:18: error: glib.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我确保我有合适的包裹:
# dpkg -l | grep libglib
ii libglib-perl 1:1.183-1 Perl interface to the GLib and GObject libra
ii libglib1.2-dev 1.2.10-19build1 The GLib library of C routines (development)
ii libglib1.2ldbl 1.2.10-19build1 The GLib library of C routines
ii libglib2.0-0 2.20.1-0ubuntu2 The GLib library of C routines
ii libglib2.0-cil 2.12.1-1ubuntu2 CLI binding for the GLib utility library 2.1
ii libglib2.0-data 2.18.2-0ubuntu2 Common files for GLib library
ii libglib2.0-dev 2.20.1-0ubuntu2 Development files for the GLib library
ii libglibmm-2.4-1c2a 2.18.1-1 C++ wrapper for the GLib toolkit (shared lib
Run Code Online (Sandbox Code Playgroud)
然后我在/ usr/include下搜索任何"glib.h".我得到两个,/usr/include/glib-1.2/glib.h和/usr/include/glib-2.0/glib.h.所以我尝试:
$ gcc -I/usr/include/glib-2.0 -Wall test.c
In file included from /usr/include/glib-2.0/glib/galloca.h:34,
from /usr/include/glib-2.0/glib.h:32,
from test.c:2:
/usr/include/glib-2.0/glib/gtypes.h:34:24: error: glibconfig.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
(大约10,000多个错误被剪掉)
glibconfig.h我的计算机上似乎没有任何地方.
现在我该怎么做?
Chr*_*uin 52
glib倾向于隐藏自己...你的include语句不起作用,因为GCC不会自动搜索子目录,因此无法在glib-1.2或glib-2.0中看到glib.h.
阅读GLIB手册中的Compiling GLib Applications页面...您可以使用命令pkg-config --cflags glib-2.0来获取GCC的正确标志.
做你正在尝试的经典方式是
% gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0`
Run Code Online (Sandbox Code Playgroud)
注意后面的滴答声,它告诉shell"就地"运行pkg-config命令.
tml*_*tml 40
> > The canonical way to do what you are trying is
> % gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0`
Run Code Online (Sandbox Code Playgroud)
对不起,不行.这是一种常见的误解,在大多数情况下恰好适用于基于ELF的系统,特别是Linux.规范的方法是在命令行的正确和传统位置单独传递cflags和库,如下所示:
gcc -Wall -o test `pkg-config --cflags glib-2.0` test.c `pkg-config --libs glib-2.0`
Run Code Online (Sandbox Code Playgroud)
遗憾的是,pkg-config同时同时接受--cflags和--libs选项,因为这意味着这个不正确的模因永远不会消失,并且人们在Linux上习惯它会在他们尝试时继续感到困惑在其他平台上也一样.
至于@chris说使用pkg-config.
glibconfig.h is missing
Run Code Online (Sandbox Code Playgroud)
这是因为这个文件不在/usr/include/glib-2.0,但是/usr/lib/glib-2.0.你必须包含这个/usr/lib路径或者将文件复制到/include/glib-2.0