2011-06-06 36 views
15

我試圖圍繞C擴展構建一個紅寶石。 C擴展使用ruby extconf.rb; make; sudo make install例程編譯正常,但是當我嘗試使用rake構建gem時,該進程終止並顯示該跟蹤底部的錯誤。執行gem時... [「extconf.rb」,...]不是文件

我使用具有相同目錄結構的信息here來創建gem。

我的配置有什麼問題?我的gemspec和Rakefile在trace下面(gem被稱爲netconf)。

//追蹤

** Execute copy:netconf:i686-linux:1.9.2 
install -c tmp/i686-linux/netconf/1.9.2/netconf.so lib/netconf/netconf.so 
** Execute compile:netconf:i686-linux 
** Execute compile:i686-linux 
** Execute compile 
** Invoke chmod (first_time) 
** Execute chmod 
** Execute build 
rake aborted! 
ERROR: While executing gem ... (Gem::InvalidSpecificationException) 
    ["extconf.rb", "netconf.o", "netconf.so"] are not files 

// netconf.gemspec

# -*- encoding: utf-8 -*- 
$:.push File.expand_path("../lib", __FILE__) 
require "netconf/version" 

Gem::Specification.new do |s| 
    s.name  = "netconf" 
    s.version  = Netconf::VERSION 
    s.authors  = ["..."] 
    s.email  = ["..."] 
    s.homepage = "..." 
    s.summary  = %q{A tool to access and write Ubuntu network configuration} 
    s.description = %q{Uses ifconfig and other C system calls to access network configurations on a Ubuntu install.} 

    s.rubyforge_project = "netconf" 

    s.files   = `git ls-files`.split("\n") 
    s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } 
    s.require_paths = ["lib"] 
    s.extensions = ["ext/netconf/extconf.rb"] 
end 

// Rake文件

require 'rake' 
require 'rake/extensiontask' 
require 'bundler' 

Rake::ExtensionTask.new("netconf") do |extension| 
    extension.lib_dir = "lib/netconf" 
end 

task :chmod do 
    File.chmod(0775, 'lib/netconf/netconf.so') 
end 

task :build => [:clean, :compile, :chmod] 

Bundler::GemHelper.install_tasks 
+0

[This](http://stackoverflow.com/questions/1314827/how-do-i-wrap-up-a-ruby-c-extension-in-a-ruby-gem)可能是相關的 – 2011-06-06 19:27:08

+0

I看到了這個問題;儘管如此,謝謝你的頭。我正在使用rake編譯器,但是我一直無法找到關於這個特定錯誤的任何信息(並且我非常確定我需要/想要一個本地C擴展,因爲我的目標是一個嵌入式平臺)。 – 2011-06-06 20:49:38

回答

37

我得到這個錯誤,因爲我沒有COMMITED使用git我的更新然而。

s.files   = `git ls-files`.split("\n") 

該行直接使用git,並可能導致此錯誤。只要做到

git add . 
git commit -a -m "init" 
+3

謝謝你分享這個,你爲我節省了很多頭痛。讓這些文件上演(不一定提交就是我需要的所有東西^ _ ^) – lfender6445 2013-09-12 19:11:48

0

FWIW,我也有類似的問題,即

s.files   = `git ls-files`.split("\n") 

s.files   = `git ls-files`.split('\n') 

,這裏的單引號是防止分裂正確的文件列表。更改爲雙引號解決了我的問題。

相關問題