【问题标题】:'glib.h' file not found on Max OSX 10.9在 Mac OS 10.9 上找不到“glib.h”文件
【发布时间】:2014-06-12 21:38:45
【问题描述】:

我正在尝试编译 msg2pdf,这是一个将 mu4e(Emacs 的 mu)中的消息转换为 pdf 的工具。 我收到以下错误:

/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in .
  CC       msg2pdf.o
In file included from msg2pdf.c:20:
In file included from ../../lib/mu-msg.h:24:
../../lib/mu-flags.h:24:10: fatal error: 'glib.h' file not found
#include <glib.h>
         ^
1 error generated.
make[2]: *** [msg2pdf.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

奇怪的是,我检查了 Makefile 并且 GLIB_CFLAGS 似乎指向正确的文件夹(brew 安装它的位置)。 其实glib.h就位于/usr/local/Cellar/glib/2.40.0_1/include/glib-2.0

GLIB_CFLAGS = -D_REENTRANT -I/usr/local/Cellar/glib/2.40.0_1/include/glib-2.0 -I/usr/local/Cellar/glib/2.40.0_1/lib/glib-2.0/include -I/usr/local/opt/gettext/include 
GLIB_LIBS = -L/usr/local/Cellar/glib/2.40.0_1/lib -L/usr/local/opt/gettext/lib -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl 

我怎样才能成功编译文件?有没有我可以在调用时使用的命令行“hack” 制作?

编辑 这是目录中的文件 https://github.com/flexdec/temp

编辑 2 这是使用 make V=1 时的输出

/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in .
gcc -DHAVE_CONFIG_H -I. -I../..  -I../../lib   -DICONDIR='""'  -Wall -Wextra -Wno-unused-parameter -Wdeclaration-after-statement -g -O2 -MT msg2pdf.o -MD -MP -MF .deps/msg2pdf.Tpo -c -o msg2pdf.o msg2pdf.c
In file included from msg2pdf.c:20:
In file included from ../../lib/mu-msg.h:24:
../../lib/mu-flags.h:24:10: fatal error: 'glib.h' file not found
#include <glib.h>
         ^
1 error generated.
make[2]: *** [msg2pdf.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

编辑 3 修复了 GLIB_CFLAGS 问题后,我使用 make V=1 得到的新错误

/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in .
gcc -DHAVE_CONFIG_H -I. -I../..  -I../../lib   -D_REENTRANT -I/usr/local/Cellar/glib/2.40.0_1/include/glib-2.0 -I/usr/local/Cellar/glib/2.40.0_1/lib/glib-2.0/include -I/usr/local/opt/gettext/include  -DICONDIR='""'  -Wall -Wextra -Wno-unused-parameter -Wdeclaration-after-statement -g -O2 -MT msg2pdf.o -MD -MP -MF .deps/msg2pdf.Tpo -c -o msg2pdf.o msg2pdf.c
msg2pdf.c:24:10: fatal error: 'gtk/gtk.h' file not found
#include <gtk/gtk.h>
         ^
1 error generated.
make[2]: *** [msg2pdf.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

【问题讨论】:

  • 您没有向 C 编译器显示命令的外观(尝试使用 make V=1 而不仅仅是 make)。也许 GLIB_CFLAGS 实际上并没有被传递给 CC...?
  • 对不起,我是编译领域的初学者。我得到与make V=1 相同的错误。我用目录中文件的链接编辑了帖子。

标签: macos emacs makefile glib


【解决方案1】:

make V=1 而不是 make 会告诉您 C 编译器命令的样子(而不仅仅是“CC msg2pdf.o”)——检查并确保它包含您需要的标志。

快速浏览一下您的 Makefile.am,您在 AM_CPPFLAGS 中包含了 $(GTK_CFLAGS) 和 $(WEBKIT_CFLAGS),但没有包含 $(GLIB_CFLAGS)。

【讨论】:

  • 谢谢我用 make V=1 输出编辑了我的消息。但老实说,这对我来说是中国人。通常我习惯使用 ./configure make install ,但仅此而已,我什至从未接触过 makefile...
  • 相关标志肯定没有进入命令行。您是否在 AM_CPPFLAGS 和 AM_CFLAGS 中添加了 $(GLIB_CFLAGS)?
  • 哈哈通过了!但现在我得到一个新的错误。未找到“gtk/gtk.h”文件。我也是通过 brew 下载的,但似乎无法识别
  • 如果查看 Makefile,GTK_CFLAGS、GTK_LIBS、WEBKIT_CFLAGS 和 WEBKIT_LIBS 是空的。您可能在 configure.ac 中缺少 pkg-config 检查和 AC_SUBST
  • 感谢您的帮助,我更新了 pkg-config 路径并重新启动了 configure,现在我找不到 'webkit/webkitwebview.h' 文件哈哈,我会解决的!
【解决方案2】:

您需要在要编译它的机器上运行 mu 的顶级目录中的 ./configure。 configure 将告诉您任何缺少的依赖项。如果它们的依赖项不存在,则跳过可选组件(例如 msg2pdf)。

然后,配置成功后,做一个'make'。

无论如何,如果 configure 已经成功运行,顶级的“make”也应该成功(这就是我们有 configure 的原因!),否则请提交错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2015-01-14
    • 1970-01-01
    • 2014-02-12
    • 2012-06-10
    相关资源
    最近更新 更多