Вы можете использовать Fiddle: http://ruby -doc.org / stdlib-2.0.0 / libdoc / fiddle / rdoc / Fiddle.html
Fiddle - малоизвестный модуль, который был добавлен в стандартную библиотеку Ruby в 1.9.x. Это позволяет вам напрямую взаимодействовать с библиотеками C из Ruby.
Он работает, оборачивая libffi, популярную библиотеку C, которая позволяет коду, написанному на одном языке, вызывать методы, написанные на другом. Если вы еще не слышали об этом, «ffi» означает «интерфейс сторонней функции». И вы не ограничены только C. Когда вы изучите Fiddle, вы сможете использовать библиотеки, написанные на Rust, и другие языки, которые его поддерживают.
http://blog.honeybadger.io/use-any-c-library-from-ruby-via-fiddle-the-ruby-standard-librarys-best-kept-secret/
require 'fiddle'
libm = Fiddle.dlopen('/lib/libm.so.6')
floor = Fiddle::Function.new(
libm['floor'],
[Fiddle::TYPE_DOUBLE],
Fiddle::TYPE_DOUBLE
)
puts floor.call(3.14159) #=> 3.0
или
require 'fiddle'
require 'fiddle/import'
module Logs
extend Fiddle::Importer
dlload '/usr/lib/libSystem.dylib'
extern 'double log(double)'
extern 'double log10(double)'
extern 'double log2(double)'
end
# We can call the external functions as if they were ruby methods!
puts Logs.log(10) # 2.302585092994046
puts Logs.log10(10) # 1.0
puts Logs.log2(10) # 3.321928094887362