[英]gem install mongoid --platform=ruby failed to build gem native extension
[英]Install Ruby gem with Native Extension
我正在创建一个新的 gem,它使用 FFI 创建一个 ruby 绑定到webview
C 库
宝石结构如下:
.
├── ...
├── Rakefile
├── ext
│ └── webview
│ ├── extconf.rb
│ ├── webview.cc
│ └── webview.h
├── lib
│ ├── webview
│ │ └── version.rb
│ ├── webview.rb
│ └── webview.so
├── ...
└── webview.gemspec
Rakefile 如下:
require "bundler/gem_tasks"
require "rubocop/rake_task"
require "rake/extensiontask"
RuboCop::RakeTask.new
task default: :rubocop
Rake::ExtensionTask.new "webview"
Gemspec如下:
# frozen_string_literal: true
require_relative "lib/webview/version"
Gem::Specification.new do |spec|
...
# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
spec.files = Dir.chdir(File.expand_path(__dir__)) do
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
end
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]
spec.extensions = ["ext/webview/extconf.rb"]
# Uncomment to register a new dependency of your gem
spec.add_dependency "ffi"
spec.add_dependency "rake-compiler"
end
当我运行rake compile
时,它会编译库并将webview.so
添加到lib/
目录。
但是当我运行rake install:local
时, webview.so
没有到位!
怎么了?
我需要使用 git 将ext
文件夹添加到git add ext/
这样git ls-files
能够捕获它并在安装过程中包含该文件。
此外,我遵循 rubygems 的约定,将webview.rb
移动到lib/webview/
中,并在lib/
中创建了一个webview.rb
,其中仅包含:
require_relative "webview/webview"
另外,我将此块添加到Rakefile
中的Rake::ExtensionTask
:
Rake::ExtensionTask.new "webview" do |ext|
ext.lib_dir = "lib/webview"
end
为了在lib/webview/
中移动共享的 object
最后一件事,我用绝对路径而不是像这样的相对路径调用ffi_lib
:
ffi_lib File.dirname(__FILE__) + '/webview.so'
瞧! 有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.