【问题标题】:Unable to compile basic GLIB program after GLIB install安装 GLIB 后无法编译基本 GLIB 程序
【发布时间】:2010-02-02 16:38:56
【问题描述】:

我似乎无法使用 glib.h 编译这个基本程序...

#include glib.h
#include stdio.h

int    main ()
{
return ((glib_major_version) || (glib_minor_version) || (glib_micro_version));  ;
return 0;
}

glib.h 位于 /usr/local/include/glib-2.0

所以我用

编译
$ gcc -v -c -mcpu=v9 -I/usr/local/include/glib-2.0 testme2.c 

现在我丢失了 glibconfig.h。但它在/usr/local/lib/glib-2.0/include/glibconfig.h

奇怪的是 glibconfig.h 是 /usr/local/lib/glib-2.0/include 目录中的唯一文件,更奇怪的是它不在 /usr/local/include/glib-2.0 目录中

这里还有一些错误信息...

from /usr/local/include/glib-2.0/glib.h:32,
            from testme.c:40:
:34:24: glibconfig.h: No such file or directory

这里是 /usr/local/include/glib-2.0/glib/gtypes.h 的摘录

ifndef __G_TYPES_H__
define __G_TYPES_H__

include glibconfig.h
include glib/gmacros.h

G_BEGIN_DECLS

typedef char   gchar;
typedef short  gshort;

问题是 GCC 应该如何找到 glibconfig.h?

【问题讨论】:

标签: c++ c gcc glib


【解决方案1】:

Glib 安装了一个 glib-2.0.pc 文件,该文件描述了编译和链接所需的所有选项。

导出 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig g++ -c `pkg-config --cflags glib-2.0` testme2.c g++ -o testme2 testme.o `pkg-config --libs glib-2.0`

注意在反引号中使用pkg-config

【讨论】:

  • 我实际上是在尝试安装 SYSLOGNG,它需要 pkg-config 和 GLIB。我需要重新测试我的 GLIB 安装......因为 '#include ' 应该可以开箱即用。我不应该将 -I/usr/local/include/glib-2.0 传递给编译器。
  • 由于您的 glib 安装到非标准位置,您可能需要设置环境变量 PKG_CONFIG_PATH 以包含适当的位置。不,glib 应该像那样开箱即用。它应该是可并行安装的,您必须使用来自pkg-config 的编译器选项来确定要使用的安装。
【解决方案2】:

$ pkg-config --cflags --libs glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0

如果存在所需库的 .pc 文件,建议使用 pkg-config 而不是手动配置,如果您有特定需求或不存在要使用的库的配置,则回退到手动配置。如您所见,pkg-config 告诉编译器将 glib-2.0 和 glib-2.0/include 目录都放入搜索路径,因为根头在全局路径中搜索。

您可以通过以下方式将 pkg-config 输出推断到您的编译命令中 gcc `pkg-config ...` ...

.pc 文件通常安装在 /usr/include/pkgconfig 中

【讨论】:

  • 鉴于 OP 似乎已将 Glib 自定义安装到 /usr/local,我希望其中也存在适当的 glib-2.0.pc
【解决方案3】:

glib 发行版中应该有一个名为glib-config 的程序。如果您使用--cflags 参数运行它,它将列出所有必要的 gcc 标志。例如在我的系统上:

$ glib-config --cflags
-I/usr/include/glib-1.2 -I/usr/lib/glib/include

如您所见,两个目录都被指定为包含目录。还有一个--libs 标志,您可以将其传递给您的链接器,因此所有正确的库都被链接,并且链接器搜索路径被正确指定。

【讨论】:

  • 没有 Glib-2.0,没有。他们已经转而使用 pkg-config.freedesktop.org 而不是自己的包装器。
  • 啊,你是对的。我(显然)有一个旧的 glib 发行版。我会留下答案以供将来参考,以防有人处理旧版本的 glib。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2020-03-01
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多