【问题标题】:native gem installs fine on 1.9.3 but fails on 2.0.0本机 gem 在 1.9.3 上安装良好,但在 2.0.0 上安装失败
【发布时间】:2023-03-24 17:36:01
【问题描述】:

自 ruby​​ 1.8.2 和 1.9.3 以来一直运行良好的带有本机扩展的私有 gem,现在无法在 ruby​​ 2.0.0 上以有线模式安装。它不是安装所需的共享对象.so 文件,而是复制一个可执行文件。 gem 源没有变化,回到 ruby​​ 1.9.3(它是 gemset)可以正常工作。

这是来自gem install 的相关 2.0.0-p0 详细输出:

linking shared-object mygem/mygem.so
make install
/usr/bin/install -c -m 0755 mygem.so /home/remus/.rvm/gems/ruby-2.0.0-p0/gems/mygem-0.1.12/lib/mygem
installing default mygem libraries

Successfully installed mygem-0.1.12
...
1 gem installed

这些是安装的工件:

$ ls -al
total 2252
-rwxr-xr-x 1 remus remus 2289443 May  4 13:08 mygem
-rw-rw-r-- 1 remus remus      62 May  4 13:08 mygem.rb

为了比较,1.9.3-p194 的输出是:

linking shared-object mygem/mygem.so

make install
/usr/bin/install -c -m 0755 mygem.so /home/remus/.rvm/gems/ruby-1.9.3-p194/gems/mygem-0.1.12/lib/mygem
installing default mygem libraries
Successfully installed mygem-0.1.12
1 gem installed

以及已安装的工件:

ls -al 
total 16
drwxrwxr-x 2 remus remus 4096 May  4 13:06 mygem
-rw-rw-r-- 1 remus remus   62 May  4 13:06 mygem.rb
ls -al mygem
total 2760
-rwxr-xr-x 1 remus remus 2810959 May  4 13:06 mygem.so
  • ruby 2.0.0-p0:rake (10.0.4, 0.9.6),rake-compiler (0.8.3),hoe (3.6.0)
  • ruby 1.9.3-p194:rake (10.0.4, 10.0.3, 0.9.2.2), rake-compiler (0.8.1), hoe (3.4.0, 3.0.8)

【问题讨论】:

  • 能否附上您的mygem.gemspec 的副本?

标签: ruby rubygems ruby-2.0


【解决方案1】:

所以,如果没有看到您的 mygem.gemspec 文件,我无法确定,但我怀疑您在其中列出了错误的文件。例如,这是一个基于用于 NMatrix 的精简 gemspec,它也使用rake-compiler

lib = File.expand_path('../lib/', __FILE__)
$:.unshift lib unless $:.include?(lib)

require 'nmatrix/version'

Gem::Specification.new do |gem|
  gem.name = "nmatrix"

  gem.files         = `git ls-files`.split("\n")
  gem.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")

  # vvv THIS LINE vvv
  gem.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
  # ^^^ THIS LINE ^^^

  gem.extensions = ['ext/nmatrix/extconf.rb']
  gem.require_paths = ["lib"]

  gem.required_ruby_version = '>= 1.9.2'

  gem.add_development_dependency 'rake', '~>0.9'
  gem.add_development_dependency 'bundler'
  gem.add_development_dependency 'rake-compiler', '~>0.8.1'
end

tl;dr:您可以尝试查看gem.executables 的行,并确保包含相关文件。

【讨论】:

  • 那么,#each_with_indices 方法的效果如何?顺便提一句。我无法在家里安装 NMatrix,我将在我的另一台机器上尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
相关资源
最近更新 更多