我想安装一个尝试构建原生扩展的ruby gem。在这种情况下的宝石是nokogiri。如果我做gem install nokogiri,本机扩展动态链接libxml,libxslt libs。我想静态链接这些库。我应该怎么做呢?
答案 0 :(得分:7)
以下是一些指示,但除非nokogiri包含构建标志以支持它,否则它并不容易:
如果nokogiri支持它,你可以传递构建参数来安装像这样的
gem install nokogiri -- --with-static-libxml
如果没有内置支持,您可以尝试调整用于安装gem的linkflags:
gem install nokogiri -- --with-ldflags='-static'
构建可能会失败,因为--with-ldflags会覆盖所有LDFLAGS,并且'-static'会尝试将所有内容链接为静态,因此您需要检查mkmf.log,并相应地对其进行处理。
如果你想手动完成,一种方法是通过使用无效选项调用gem install失败,如:
gem install nokogiri -- --with-ldflags
这将导致安装失败并显示如下消息:
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
ruby extconf.rb --with-ldflags
所以你应该能够在完成安装后自己构建gem(参见gem help install
):
gem spec ../../cache/nokogiri-1.4.1.gem --ruby > \
../../specifications/nokogiri-1.4.1.gemspec
答案 1 :(得分:6)
尝试:
sudo apt-get install libxslt-dev libxml2-dev
我解决了这个问题。
答案 2 :(得分:3)
首先要安装nokogiri gem,你需要安装libxslt-dev和libxml2-dev
sudo apt-get install libxslt-dev libxml2-dev
然后安装nokogiri gem
sudo gem install nokogiri
之后您需要安装捆绑包
bundle install
最后但并非最不重要的是,需要在Gemfile中定义已安装的gem
gem 'nokogiri'
这些步骤对我来说完美无缺。
答案 3 :(得分:2)
错误消息:错误:安装nokogiri时出错:错误:无法构建 宝石原生扩展。
我只是通过运行这两个命令解决了这个问题:
$ sudo apt-get install libxml2 libxml2-dev libxslt libxslt-dev?
$ gem install nokogiri
它工作得很好.. !! :)
答案 4 :(得分:1)
如果您正在使用RVM,请运行rvm requirements并在#For Ruby / Ruby HEAD上安装库列表。
那应该有用
答案 5 :(得分:0)
我解决了这个问题: sudo apt-get install libxml ++ 1.0-dev
这里的真正问题是因为这个nokogiri依赖于libxml1,但默认安装是libxml2 ....
答案 6 :(得分:0)
sudo apt-get install libxslt1-dev libxml2-dev
适合我。截至2013年7月31日