c - Linux : Glib was not found

标签 c linux

我有一个使用 GLib 库的示例 C 项目。在该源代码中,它使用:

#include <glib.h>

当我编译时,我发现这个错误:“Glib.h : no such file or folder”。我有谷歌,发现我应该安装这个库。所以我使用这些命令:

apt-get install libgtk2.0-dev
apt-get install glade

之后,我查看了我的系统中已经存在这个头文件:usr/include/glib-2.0/glib.h 但是当我编译时,我仍然遇到上面的问题。

所以我将包含行更改为:

#include <glib-2.0/glib.h>

因此,在那之后,当我编译时,我在 glib.h header 中遇到错误:

#ifndef __G_LIB_H__
#define __G_LIB_H__

#define __GLIB_H_INSIDE__

#include <glib/galloca.h>
#include <glib/garray.h>
// more code here

glib/galloca.h : no such file or directory. 由于这个错误在系统头文件中,我无法再修改,仍然无法编译。

我不知道如何解决这个问题。我读过一些帖子,他们更改了 makefile。但是,由于我的项目是IDE自动编译的(CodeBlock),我不会真正编写makefile,所以这种方法不适合我。

请告诉我解决此问题的方法。

谢谢:)

最佳答案

一定是你的搭建方式有问题。要编译使用 GLib 的 C 程序,您需要软件包 libglib2.0-dev。您可以直接安装它,也可以安装 libgtk2.0-dev,这会将它作为依赖项引入。这样您就拥有了所需的软件包。

编译 GLib 程序的正确方法是使用 -I 和 GLib 包含文件的路径。 一个例子(来自 askubuntu 上的 How to compile a helloworld GLib program?):

gcc $(pkg-config --cflags --libs glib-2.0) hello_glib.c

这应该让你编译这个程序:

#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;
}

您收到的错误表明您没有正确设置包含路径 (-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  

-I 之后的目录必须在项目的编译器选项中设置(应该在 Project -> Build Options -> Search Directories 下),-l< 之后的名称 必须在链接器设置中设置。另一种选择是创建一个 Makefile,然后让 Code::Blocks 使用它。

参见例如Q: What do I need to know when using 3rd party libs?在 Code::Blocks Wiki 中。

关于c - Linux : Glib was not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890576/

相关文章:

c - sprintf 和分配内存

c - 在 C 中实现 shell 并需要帮助处理输入/输出重定向

objective-c - 在 Mac OS X 下开发与 Linux 兼容的命令行实用程序

c - 在 3d 空间中找到有效率的最近邻居

c - 有没有办法检测,C 文件被直接编译成可执行文件?

linux - 以 systemd 启动的进程正在记录到/var/log/syslog 和/var/log/daemon.log

c++ - 如何找到 "my"lib目录?

linux - 如何配置拇指安全性?

c - 如何打印结构的各个成员

c - 绑定(bind):无法分配请求的地址