我想安装一个ruby gem,它试图构建一个原生扩展.在这种情况下的宝石是nokogiri.如果我做gem install nokogiri,本机扩展动态链接libxml,libxslt libs.我想静态链接这些库.我该怎么办呢?
这里有一些指示,但除非nokogiri包含构建标志以支持它,否则它并不容易:
如果nokogiri支持它,你可以传递构建参数来安装这样的gem
gem install nokogiri -- --with-static-libxml
Run Code Online (Sandbox Code Playgroud)如果没有内置支持,您可以尝试调整用于安装gem的linkflags:
gem install nokogiri -- --with-ldflags='-static'
Run Code Online (Sandbox Code Playgroud)
构建可能会失败,因为--with-ldflags会覆盖所有LDFLAGS,并且'-static'尝试将所有内容链接为静态,因此您需要检查mkmf.log,并相应地对其进行处理.
如果你想手动完成,一种方法是通过调用无效选项使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)