我需要在我的Debian服务器上安装Ruby gem。这失败了一条错误消息,这对我作为非ruby程序员来说并不是很有帮助。你能帮我诊断一下这个问题吗?缺少哪些“必要的库和/或标题”?
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 :(得分:2)
一些Ruby宝石带有“原生扩展”,这意味着它们不是完全用Ruby编写的,而是包含对用C语言编写的一些外部库的绑定。通常这是出于性能原因,或者使用完善的图书馆,而不是重新发明轮子。
在您的情况下,它无法编译本机扩展,因为缺少头文件。您可能需要安装libmagic-dev
Debian软件包。像
sudo apt-get install libmagic-dev
可以解决问题,具体取决于您的包管理器!