如何让Ruby找到本机库?
我在/ 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
解决这个问题的最佳方法是什么?
我已经阅读了这些评论,我知道你让它发挥了作用,但我认为我有适当的解决方案。
have_library
检查是否可以在您的环境中使用给定的库。 它通过包含库头并在临时C源文件中使用其中一个函数来实现。 如果成功,则库必须可用。
have_library 'geocodesearch' checking for main() in -lgecodesearch... no
have_library
无法使用 have_library
的main
函数。 这意味着库不可用或function不存在。 在你的情况下,它可能是后者。
您可以通过传递第二个参数来告诉have_library
尝试哪个函数。 例如:
have_library 'geocodesearch', 'geocodesearch_version' checking for geocodesearch_version() in -lgecodesearch...
如果您没有指定,它将只查找main
函数。 您还可以指定要包含的标头:
have_library 'geocodesearch', 'geocodesearch_version', %w(geocode/search.h)
在评论中,您说通过简单地消除have_library
调用解决了您的问题。 这是一个本地化的解决方案 您将不得不将其重新应用于任何新版本的gem。
我建议向作者发送包含必要调整的拉取请求。 该错误将永久修复,您也可以帮助其他可能遇到相同问题的人。
mkmf
参考:
- 源代码
- 文档