2012-02-16 12 views
7

/usr/local/lib dizinine bazı yerel kitaplıklar yükledim.Ruby yerel bir kütüphaneyi nasıl bulabilir?

Şu anda derlemesini düzgün bir şekilde oluşturmak için gereken bir mücevher yüklemeye çalışıyorum, ancak kitaplıklarını bulamadığı için taş yapı başarısız oluyor.

Gem'ın extconf.rb dosyası kütüphaneyi have_library() ile bulabildiğini doğrulamaya çalışır ancak bu bazı nedenlerle başarısız olur.

irb(main):003:0> require 'mkmf' 
=> true 
irb(main):004:0> have_library('gecodesearch') 
checking for main() in -lgecodesearch... no 
=> false 
irb(main):005:0> ENV['LD_LIBRARY_PATH']='/usr/local/lib' 
=> "/usr/local/lib" 
irb(main):006:0> have_library('gecodesearch') 
checking for main() in -lgecodesearch... no 
=> false 
irb(main):007:0> ENV['DYLD_LIBRARY_PATH']='/usr/local/lib' 
=> "/usr/local/lib" 
irb(main):008:0> have_library('gecodesearch') 
checking for main() in -lgecodesearch... no 
=> false 
irb(main):009:0> have_library('libgecodesearch') 
checking for main() in -llibgecodesearch... no 
=> false 
irb(main):010:0> ENV['C_INCLUDE_PATH']='/usr/local/lib' 
=> "/usr/local/lib" 
irb(main):011:0> have_library('gecodesearch') 
checking for main() in -lgecodesearch... no 
=> false 
irb(main):012:0> ENV['PATH']='/usr/local/lib' 
=> "/usr/local/lib" 
irb(main):013:0> have_library('gecodesearch') 
checking for main() in -lgecodesearch... no 
=> false 

bu sorunu çözmek için en iyi yolu nedir:

ben ortam değişkenleri ama hiçbir şey bir demet iş gibi görünüyor ayarlama çalıştı?

+0

"$:" olarak da bilinir, hepsi çalışır: '$: <<"/usr/local/lib/mylib "' Alternatif olarak, Ruby tercümanını bir veya daha fazla ['-I'] ile çağırın (http: // www .zenspider.com/Diller/Ruby/QuickRef.html # komut satırı seçenekleri) seçenekleri: ruby ​​-I/usr/local/lib/mylib foo.rb' – Phrogz

+0

Ne yazık ki, hayır, bu durum bu değil 'irb (ana): 001: 0> gerektirir 'mkmf' ' => true' 'irb (ana): 002: 0> $: << "/ usr/local/lib" ' ' => ["/usr/pkg/lib/ruby/site_ruby/1.9", "/usr/pkg/lib/ruby/site_ruby/1.9/i386-netbsdelf", "/ usr/pkg/lib/ruby ​​/ site_ruby "," /usr/pkg/lib/ruby/vendor_ruby/1.9 "," /usr/pkg/lib/ruby/vendor_ruby/1.9/i386-netbsdelf ","/usr/pkg/lib/ruby ​​/ vendor_ruby "," /usr/pkg/lib/ruby/1.9 "," /usr/pkg/lib/ruby/1.9/i386-netbsdelf ","/usr/local/lib ","/usr/local/lib "]' 'irb (main): 003: 0> have_library ('gecodesearch')' ana denetleme() in -lgecodesearch ... no => false' –

+0

Kök ekleme/usr/local/lib 'yük yoluna, librari'nin gerçek dizin/dizinlerini yükle ihtiyacın var. Ruby, yük yolundaki dizinlerin altındaki tüm dizinleri hiyerarşik olarak aramaz. – Phrogz

cevap

2

Yorumları okudum ve çalışmanızı sağladığınızı biliyorum, ama sanırım sorun için uygun çözüme sahibim. Ortamınızda verilen kitaplığı kullanmanın mümkün olup olmadığını denetler.

have_library Bu, kütüphane başlığını ekleyerek ve işlevlerinden birini geçici bir C kaynağı dosyasında kullanarak yapar. Eğer başarılı olursa, kütüphane mevcut olmalıdır.

have_library 'geocodesearch' 
checking for main() in -lgecodesearch... no 

have_library değil kullanımgeocodesearch den main işlev yapamadı. Bu, kütüphanenin mevcut olmadığı veya fonksiyonun mevcut olmadığı anlamına gelir. Senin durumunda muhtemelen ikincisi.

İkinci bir argümanı geçerek denemek için have_library işlevini çalıştırabilirsiniz. Örneğin: belirtmezseniz

have_library 'geocodesearch', 'geocodesearch_version' 
checking for geocodesearch_version() in -lgecodesearch... 

, sadece main fonksiyonu arayacaktır. Ayrıca başlıklar dahil edilecek belirtebilirsiniz:

have_library 'geocodesearch', 'geocodesearch_version', %w(geocode/search.h) 

yorumlarda, sen sadece have_library aramaları ortadan kaldırarak sorunu çözüldü söyledi. Bu yerelleştirilmiş bir çözümdür; geminin yeni sürümlerine yeniden başvurmanız gerekecektir.

Gerekli düzeltmeleri içeren yazara bir çekme isteği göndermenizi öneririz. Hata kalıcı olarak sabitlenecek ve aynı sorunu yaşayan başkalarına da yardım edeceksiniz.

mkmf referans: Doğrudan Bu durumla karşılaşmadım hiç ama (`$ LOAD_PATH` yolunu eklerseniz bunu tahmin ediyorum

İlgili konular