在OSX上将c库加载到Ruby for ffi的最佳方法是什么?

时间:2017-03-11 21:48:46

标签: ruby macos ffi aspell

我正在尝试在OSX上使用ffi-aspell

现在,代码失败了,因为找不到libaspell.so.15,因为它在自制程序中的命名方式不同而且路径不同:

/opt/boxen/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/library.rb:147:in `block in ffi_lib': Could not open library 'aspell': dlopen(aspell, 5): image not found. (LoadError)
Could not open library 'libaspell.dylib': dlopen(libaspell.dylib, 5): image not found

所以经过一番挖掘后,我在Github上发现了一些人们正在检查安装hombrew,然后寻找路径的例子。

我最终得到了类似的东西,对我有用:

module Aspell
  extend FFI::Library

  begin
    stdout, stderr, status = ::Open3.capture3("brew", "--prefix")
    homebrew_path  = if status.success?
                      "#{stdout.chomp}/lib"
                    else
                      '/usr/local/homebrew/lib'
                    end
  rescue
    # Homebrew doesn't exist
  end

  ffi_lib ['aspell', 'libaspell.so.15'] if RUBY_PLATFORM =~ /linux/
  ffi_lib ["#{homebrew_path}/libaspell.dylib"] if RUBY_PLATFORM =~ /darwin/

这感觉就像一个相当hacky的解决方案。

有更清洁的方法吗?

0 个答案:

没有答案