[英]Ruby C extension gem doesn't compile at installation
我有一個小項目,想通過gem分享。 此擴展名必須在用戶系統上編譯。 因此,必須在安裝gem時完成編譯。
我的項目很簡單:
tree
├── myext.gemspec
├── ext
│ └── myext
│ └── myext.c
│ └── extconf.rb
├── lib
│ ├── myext
│ └── myext.rb
├── Rakefile
└── test
我已經檢查了extconf.rb和編譯工作,如果我這樣做
ruby extconf.rb && make
我有一個myext.gemspec:
Gem::Specification.new do |s|
s.name = 'myext'
s.version = '0.0.1'
s.date = '2015-04-22'
s.summary = "an extension"
s.description = "an extension that is mine"
s.authors = ["cedlemo"]
require "rake" #for FileList
s.files = FileList['lib/*/*.{so}',
'lib/*.{rb}'
].to_a
s.extensions = %w(ext/myext/extconf.rb)
s.add_development_dependency 'rake-compiler', '~> 0'
s.license = 'MIT'
end
這是我的Rakefile:
require "rubygems"
require "rake/extensiontask"
spec = Gem::Specification.load('myext.gemspec')
Rake::ExtensionTask.new "myext", spec do |ext|
ext.lib_dir = "lib/myext"
end
當我制造寶石時,一切都很好:
gem build myext.gemspec
而且當我安裝gem時,沒有任何錯誤消息:
gem install myext-0.0.1.gem
Building native extensions. This could take a while...
Successfully installed myext-0.0.1
1 gem installed
我的問題是C代碼未編譯,並且我沒有安裝任何.so文件:
/home/cedlemo/.gem/ruby/2.2.0/gems/myext-0.0.1/
├── ext
│ └── myext
│ ├── extconf.rb
│ └── Makefile
└── lib
└── myext.rb
PS:我已經閱讀了很多文檔(官方或博客...),每個人都在做自己的事情,所以它不是很清楚,我找不到解決方案,所以請不要發送鏈接到http://例如guides.rubygems.org/ 。
您沒有在gemspec
files
部分中包含源文件,因此在安裝gem時無需編譯。 確保包括所有需要的文件:
s.files = FileList['lib/**/*.rb', 'ext/**/*.{rb,c,h}']
您不需要包括.so
文件,因為它們將在安裝過程中生成(實際上可能不是.so
)。 我也不認為您需要添加to_a
(一個FileList
基本上已經是一個數組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.