Tôi đã cài đặt một số thư viện gốc trong/usr/local/lib.Làm cách nào để Ruby tìm một thư viện gốc?
Tôi hiện đang cố gắng cài đặt một viên đá quý cần những thứ này để xây dựng một cách chính xác nhưng, việc xây dựng đá quý không thành công vì nó không thể tìm thấy thư viện .
Tệp extconf.rb của đá quý cố gắng xác nhận nó có thể tìm thấy thư viện với have_library()
nhưng điều này không thành công vì một số lý do.
tôi đã cố gắng thiết lập một loạt các biến môi trường nhưng không có vẻ làm việc:
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
cách tốt nhất để giải quyết vấn đề này là gì?
Tôi chưa bao giờ gặp phải tình huống này trực tiếp, nhưng tôi giả định rằng nếu bạn thêm đường dẫn đến '$ LOAD_PATH' (còn được gọi là '$:') tất cả sẽ hoạt động: '$: <<"/usr/local/lib/mylib "' Hoặc, hãy gọi trình thông dịch Ruby với một hoặc nhiều ['-I'] (http: // www Tùy chọn .zenspider.com/Languages / Ruby/QuickRef.html # command-line-options): 'ruby -I/usr/local/lib/mylib foo.rb' – Phrogz
Thật không may, không, đó không phải là trường hợp 'irb (chính): 001: 0> yêu cầu 'mkmf'' ' => true' ' irb (chính): 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 (chính): 003: 0> have_library (' gecodesearch ') ' kiểm tra chính() trong -lgecodesearch ... no => false' –
Không thêm thư mục gốc của '/ usr/local/lib' vào đường dẫn tải, tải thư mục/thư mục thực sự của librari es bạn cần. Ruby không tìm kiếm theo thứ bậc tất cả các thư mục bên dưới các thư mục trong đường dẫn tải. – Phrogz