【问题标题】:Configure.ac AC_CHECK_HEADERS not finding ruby.hConfigure.ac AC_CHECK_HEADERS 没有找到 ruby​​.h
【发布时间】:2013-03-11 22:15:16
【问题描述】:

我正在尝试构建一些代码,但发现我需要先更改 configure.ac 文件,因为它没有在正确的位置搜索 ruby​​ 标头。今天是我第一次查看 config.ac 文件,所以在挖掘和更改它们时肯定会出现问题!但是,是的,我对这类事情完全是新手,如果这是一个愚蠢的问题,我深表歉意。

在我的系统上,ruby.h 文件位于/usr/include/ruby/ruby.h,实际上在/usr/include/ruby.h 有一个类似名称的文件。我承认我不知道哪个是正确的,但无论哪种方式,我的配置脚本都找不到它。

这是我的 configure.ac 文件中应该找到正确标题的部分:

CPPFLAGS="$CPPFLAGS -I/usr/include/ruby"
AC_MSG_CHECKING([CPPFLAGS are $CPPFLAGS])
AC_CHECK_HEADER([ruby.h],
                [AC_DEFINE(HAVE_RUBY_H, 1, [has ruby.h -- ruby-dev is installed] )],
                [AC_MSG_ERROR([Sorry, you need ruby-dev (headers) installed])])
CPPFLAGS=$SAVE_CPPFLAGS

但这是我得到的输出:

checking ruby.h usability... no
checking ruby.h presence... no
checking for ruby.h... no
configure: error: Sorry, you need ruby-dev (headers) installed

config.log 文件中,给出以下消息:

configure:13689: checking ruby.h usability
configure:13689: gcc -c   -I/usr/include/ruby/ conftest.c >&5
In file included from conftest.c:69:0:
/usr/include/ruby/ruby.h:24:25: fatal error: ruby/config.h: No such file or directory

我不明白它要查找的 config.h 文件到底是什么。

另外,我发现了一个类似的问题here,但我尝试了建议的修复(即在 AC_CHECK_HEADER 调用中指定路径),但没有任何效果。我也看到了这个问题here,这让我觉得我的问题可能是权限问题,但我仍然不知道日志中提到的config.h 文件的用途。无处可寻。

有什么想法吗?

【问题讨论】:

  • 您绝对不需要或不想更改configure.ac。您只需要在运行配置脚本时正确指定CPPFLAGS
  • config.h 是一个永远不应该安装的文件。如果您正在查找包含config.hruby.h,那么您将找到错误的ruby.h。运行configure 脚本时CPPFLAGS 的值是多少?
  • @WilliamPursell 哦,很高兴知道我不必修改此文件。此外,我链接到的 ruby​​.h 文件确实包括“ruby/config.h”。我编辑了我的原始帖子以包含我从配置脚本中得到的错误。由于我的修改,当我运行脚本时,CPPFLAGS 设置为-I/usr/include/ruby/。最初 CPPFLAGS 设置为 /usr/lib64/
  • 可悲的是,ruby 安装了一个 config.h,它看起来像是来自 autoheader

标签: ruby build configure autoconf


【解决方案1】:

基本问题是您的 Ruby 标头安装似乎不完整。 Autoconf 探测很好(除了你通常不应该在configure.ac 中更改CPPFLAGS,因为它是为用户保留的)。

这里真正的问题是您的ruby/config.h 文件发生了什么事。这应该是正常 Ruby 开发文件安装的一部分。

值得注意的是,在 Debian 和 Ubuntu 上,为 multiarch 移动了一些头文件(以便可以同时安装包的多个架构),ruby/config.h 文件,因为它依赖于架构,已移至子目录。例如在我的系统上:

windlord:/usr/include/ruby-1.9.1> ls -R
.:
i486-linux/  ruby/  ruby.h

./i486-linux:
ruby/

./i486-linux/ruby:
config.h

./ruby:
backward/  dl.h        io.h         re.h     st.h     version.h
defines.h  encoding.h  missing.h    regex.h  subst.h  vm.h
digest.h   intern.h    oniguruma.h  ruby.h   util.h

./ruby/backward:
classext.h  rubyio.h  rubysig.h  st.h  util.h

因此,如果您尝试使用不支持多架构且因此不知道在 /usr/include/i486-linux 目录中搜索的编译器,我希望您会收到错误消息,而您正在使用 Ruby 的多架构安装。会不会是这个问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多