簡體   English   中英

Ruby C擴展gem在安裝時無法編譯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM