【发布时间】:2012-02-16 16:16:06
【问题描述】:
我在 /usr/local/lib 中安装了一些本地库。
我现在正在尝试安装一个需要这些的 gem,以便 正确构建,但是 gem 构建失败,因为它找不到 图书馆。
gem 的 extconf.rb 文件试图确认它可以找到库
have_library() 但由于某种原因失败了。
我尝试设置一堆环境变量,但似乎没有任何效果:
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
解决这个问题的最佳方法是什么?
【问题讨论】:
-
我从来没有直接遇到过这种情况,但是我假设如果您将路径添加到
$LOAD_PATH(也称为$:),一切都会起作用:$: << "/usr/local/lib/mylib"或者,使用一个或多个-I选项调用 Ruby 解释器:ruby -I/usr/local/lib/mylib foo.rb -
不幸的是,不,不是这种情况
irb(main):001:0> require 'mkmf'=> trueirb(main):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')在-lgecodesearch中检查main()... no => false`跨度> -
不要将
/usr/local/lib的根添加到加载路径,加载你需要的库的实际目录/目录。 Ruby 不会分层搜索加载路径中目录下的所有目录。 -
.so 文件直接在 /usr/local/lib 中,而不是某个子目录。默认情况下,该选择是由 lib 的 Makefile 做出的。
-
试试
nm /usr/local/lib/libgecodesearch.so,看看它是否包含_main或main符号