2013-03-11 45 views
0

我想構建一些代碼,但發現我需要先更改configure.ac文件,因爲它沒有在正確的地方搜索ruby頭文件。今天是我看到config.ac文件的第一天,所以在挖掘它們並改變它們的時候肯定會遇到問題!但是,是的,我對這些事情是一個完全新手,所以如果這是一個愚蠢的問題,很抱歉。Configure.ac AC_CHECK_HEADERS not found ruby​​.h

在我的系統上,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 

我不明白是什麼它正在尋找的文件正是。

此外,我發現了一個類似的問題here,但我嘗試了建議的修復(即在AC_CHECK_HEADER調用中指定路徑),但沒有任何工作。我也看到了這個問題here,這讓我認爲我的問題可能是權限問題,但我仍然不知道日誌談到的config.h文件的用途。它無處可尋。

任何想法?

+0

你完全不需要或想要改變'configure.ac'。您只需在運行配置腳本時正確指定'CPPFLAGS'即可。 – 2013-03-11 22:24:52

+0

'config.h'是一個永遠不應該安裝的文件。如果您正在查找包含'config.h'的ruby.h,那麼您發現錯誤的'ruby.h'。運行'configure'腳本時'CPPFLAGS'的值是多少? – 2013-03-11 22:28:03

+0

@WilliamPursell噢,這是很好的知道,我不必修改此文件。此外,我鏈接到DOES的ruby.h文件包括「ruby/config.h」。我編輯了我的原始文章,以包含我從配置腳本中獲得的錯誤。由於我的修改,當我運行腳本時,CPPFLAGS被設置爲'-I/usr/include/ruby​​ /'。最初CPPFLAGS被設置爲'/ usr/lib64 /' – 2013-03-11 22:46:50

回答

0

基本的問題是,它看起來像你有一個不完整的Ruby頭安裝。 Autoconf探針沒有問題(除了您通常不應該在configure.ac中更改CPPFLAGS,因爲它是爲用戶保留的)。

這裏真正的問題是您的ruby/config.h文件發生了什麼。這應該是普通Ruby開發文件安裝的一部分。

值得注意的是,在Debian和Ubuntu上,一些頭文件已經被移動到多元文件夾中(因此可以同時安裝多個軟件包體系結構),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 

因此,我要想到,你得到的錯誤消息,如果你想使用編譯器未multiarch感知,因此不知道搜索在/usr/include/i486-linux目錄中,並且您正在使用Ruby的多元安裝。這可能是問題嗎?