我有一个使用GLib库的示例C项目。在该源代码中,它使用:
#include <glib.h>
Run Code Online (Sandbox Code Playgroud)
编译时,发现以下错误:“ Glib.h:没有这样的文件或文件夹”。我有谷歌,发现我应该安装这个库。所以我用那些命令:
apt-get install libgtk2.0-dev
apt-get install glade
Run Code Online (Sandbox Code Playgroud)
之后,我检查了一下并发现系统中已存在此头文件:usr/include/glib-2.0/glib.h但是,当我编译时,仍然遇到上面的问题。
所以我将包含行更改为:
#include <glib-2.0/glib.h>
Run Code Online (Sandbox Code Playgroud)
因此,在那之后,当我编译时,我在glib.hheader中遇到错误:
#ifndef __G_LIB_H__
#define __G_LIB_H__
#define __GLIB_H_INSIDE__
#include <glib/galloca.h>
#include <glib/garray.h>
// more code here
Run Code Online (Sandbox Code Playgroud)
glib/galloca.h : no such file or directory. 由于此错误在系统头文件中,因此我无法再进行修改并且仍然无法编译。
我不知道该如何解决。我读了一些帖子,他们更改了makefile。但是,由于我的项目是由IDE(CodeBlock)自动编译的,因此我无法真正编写Makefile,因此该方法不适合我。
请告诉我解决此问题的方法。
谢谢 :)
您的建造方式一定有问题。要编译使用GLib的C程序,您需要package libglib2.0-dev。您既可以直接安装它,也可以安装install libgtk2.0-dev作为依赖将其拉入。这样您便拥有了所需的软件包。
编译GLib程序的正确方法是使用-IGLib包含文件的路径。一个示例(来自askubuntu上的“ 如何编译helloworld GLib程序? ”):
gcc $(pkg-config --cflags --libs glib-2.0) hello_glib.c
Run Code Online (Sandbox Code Playgroud)
这应该让您编译该程序:
#include <stdio.h>
#include <glib.h>
int main(int argc, char** argv) {
GList* list = NULL;
list = g_list_append(list, "Hello world!");
printf("The first item is '%s'\n", g_list_first(list)->data);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您收到的错误表明您没有-I正确设置包含路径()。如何执行此操作取决于您的构建系统/ IDE。
在Code :: Blocks中,必须在适当的配置对话框中设置包含路径和链接器选项。运行pkg-config --cflags --libs glib-2.0,将输出类似
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -lglib-2.0
Run Code Online (Sandbox Code Playgroud)
之后的目录-I必须在项目的编译器选项中设置(应该在Project-> Build Options-> Search Directories下),并且之后的名称-l必须在链接器设置中设置。另一个选择是创建一个Makefile,然后让Code :: Blocks使用它。
参见例如 Q:使用第三方库时我需要知道什么?在Code :: Blocks Wiki中。