2012-12-03 76 views
0

我需要在我的Debian服務器上安裝Ruby gem。這失敗了一個錯誤消息,這對我來說不是非常有用,作爲一個非Ruby程序員。你能幫我診斷問題嗎?什麼是缺少的「必要的圖書館和/或標題」?Ruby Gems:缺少庫或標題

root ~ # gem install schleuder 
Building native extensions. This could take a while... 
ERROR: Error installing schleuder: 
    ERROR: Failed to build gem native extension. 

/usr/bin/ruby1.8 extconf.rb 
checking for magic_open() in -lmagic... no 
*** ERROR: missing required library to compile this module 
*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers. Check the mkmf.log file for more 
details. You may need configuration options. 

Provided configuration options: 
    --with-opt-dir 
    --without-opt-dir 
    --with-opt-include 
    --without-opt-include=${opt-dir}/include 
    --with-opt-lib 
    --without-opt-lib=${opt-dir}/lib 
    --with-make-prog 
    --without-make-prog 
    --srcdir=. 
    --curdir 
    --ruby=/usr/bin/ruby1.8 
    --with-magic-dir 
    --without-magic-dir 
    --with-magic-include 
    --without-magic-include=${magic-dir}/include 
    --with-magic-lib 
    --without-magic-lib=${magic-dir}/lib 
    --with-magiclib 
    --without-magiclib 


Gem files will remain installed in /var/lib/gems/1.8/gems/ruby-filemagic-0.4.2 for inspection. 
Results logged to /var/lib/gems/1.8/gems/ruby-filemagic-0.4.2/ext/gem_make.out 

日誌文件(假設這是正確的)說:

root ~ # cat /var/lib/gems/1.8/gems/ruby-filemagic-0.4.2/ext/mkmf.log 
have_library: checking for magic_open() in -lmagic... -------------------- no 

"gcc -o conftest -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fno-strict-aliasing -g -g -O2 -fPIC conftest.c -L. -L/usr/lib -L. -rdynamic -Wl,-export-dynamic  -lruby1.8-static -lmagic -lpthread -lrt -ldl -lcrypt -lm -lc" 
conftest.c: In function ‘t’: 
conftest.c:3: error: ‘magic_open’ undeclared (first use in this function) 
conftest.c:3: error: (Each undeclared identifier is reported only once 
conftest.c:3: error: for each function it appears in.) 
checked program was: 
/* begin */ 
1: /*top*/ 
2: int main() { return 0; } 
3: int t() { void ((*volatile p)()); p = (void ((*)()))magic_open; return 0; } 
/* end */ 

"gcc -o conftest -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fno-strict-aliasing -g -g -O2 -fPIC conftest.c -L. -L/usr/lib -L. -rdynamic -Wl,-export-dynamic  -lruby1.8-static -lmagic -lpthread -lrt -ldl -lcrypt -lm -lc" 
/usr/bin/ld: cannot find -lmagic 
collect2: ld returned 1 exit status 
checked program was: 
/* begin */ 
1: /*top*/ 
2: int main() { return 0; } 
3: int t() { magic_open(); return 0; } 
/* end */ 

-------------------- 
+0

日誌文件說什麼... – halfelf

回答

2

一些紅寶石寶石配有「本機擴展」,這意味着它們不能完全用Ruby編寫的,但包含綁定到用C編寫的一些外部庫。通常這是出於性能原因,或者使用完善的庫,而不是重新發明輪子。

在你的情況下,它不能編譯本地擴展,因爲頭文件丟失。您可能需要安裝libmagic-dev Debian軟件包。像

sudo apt-get install libmagic-dev 

會做的伎倆,取決於你的包管理器!