使用原生扩展安装nokogiri ruby​​ gem

use*_*468 4 ruby gem

我想安装一个ruby gem,它试图构建一个原生扩展.在这种情况下的宝石是nokogiri.如果我做gem install nokogiri,本机扩展动态链接libxml,libxslt libs.我想静态链接这些库.我该怎么办呢?

mfa*_*kas 7

这里有一些指示,但除非nokogiri包含构建标志以支持它,否则它并不容易:

  1. 如果nokogiri支持它,你可以传递构建参数来安装这样的gem

    gem install nokogiri -- --with-static-libxml
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果没有内置支持,您可以尝试调整用于安装gem的linkflags:

    gem install nokogiri -- --with-ldflags='-static'
    
    Run Code Online (Sandbox Code Playgroud)

    构建可能会失败,因为--with-ldflags会覆盖所有LDFLAGS,并且'-static'尝试将所有内容链接为静态,因此您需要检查mkmf.log,并相应地对其进行处理.

  3. 如果你想手动完成,一种方法是通过调用无效选项使gem安装失败,如:

    gem install nokogiri -- --with-ldflags
    
    Run Code Online (Sandbox Code Playgroud)

    这将导致安装失败并显示如下消息:

    Building native extensions.  This could take a while...
    ERROR:  Error installing nokogiri:
           ERROR: Failed to build gem native extension.
    
    ruby extconf.rb --with-ldflags
    
    Run Code Online (Sandbox Code Playgroud)

    因此,您应该能够自己构建宝石,然后完成安装(参见参考资料gem help install):

      gem spec ../../cache/nokogiri-1.4.1.gem --ruby > \
             ../../specifications/nokogiri-1.4.1.gemspec
    
    Run Code Online (Sandbox Code Playgroud)


张健健*_*张健健 6

尝试:

sudo apt-get install libxslt-dev libxml2-dev
Run Code Online (Sandbox Code Playgroud)

我解决了这个问题.