2011-06-06 11 views
15

Bir C uzantısı etrafında bir yakut mücevher oluşturmaya çalışıyorum. C uzantısı ruby extconf.rb; make; sudo make install rutinini kullanarak iyi derler, ancak komisyon kullanarak bir taş oluşturmaya çalıştığımda, işlem bu izlemenin altındaki hatayla sonlanır.Gem çalıştırılırken ... ["extconf.rb", ...] dosyalar dosya değil

Taş oluşturmak için aynı dizin yapısıyla, here numaralı gönderiyi kullanıyorum.

Yapılandırmamda neyin var? Benim gemspec ve Rakefile izimin altındadır (mücevher netconf olarak adlandırılır).

Ben git ile Güncellemelerimi kararlı değil çünkü bu hata var

** 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 

// Rakefile

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) ilgili olabilir –

+0

I bu soruyu gördü; başın için teşekkürler. Komisyon-derleyici kullanıyorum, ancak bu özel hata hakkında herhangi bir bilgi bulamadım (ve tek bir gömülü platformu hedeflediğim için yerel bir C uzantısına ihtiyacım var/istediğimden eminim). –

cevap

37

Trace // henüz.

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

Bu satır doğrudan git'i kullanıyordur ve bu hataya neden olabilir. Sadece

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

Bunu paylaştığınız için teşekkür ederim, bana çok fazla başağrı kurdunuz. sahnelenen dosyalara sahip olmak (zorunlu olarak benim için gerekli değildir, hepsi benim için gerekliydi^_ ^) – lfender6445

0

FWIW yap, ben tek tırnak düzgün bölme dosya listesini engelleyen nerede

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

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

oldu benzer bir sorunu vardı. Çift teklife geçmek benim için sorunu çözdü.

İlgili konular