У меня есть пара динамических c библиотек, с которыми мне нужно взаимодействовать. Я использую ffi gem для этого.
Имя моего файла: "test.rb":
require 'ffi'
module Libs
extend FFI::Library
ffi_lib_flags :now, :global
ffi_lib [Dir.pwd + '/beagle.dll']
ffi_lib [Dir.pwd + '/cheetah.dll']
ffi_lib [Dir.pwd + '/my_library.dll']
attach_function :get_version [], :int
end
class MyLibClass
include Libs
def initialize
@result = nil
end
def check_version
@result = get_version()
end
end
lib = MyLibClass.new
lib.check_version
my_library.dll использует функции из beagle.dll и cheetah.dll . Если я создаю объект и вызываю метод check_version для вызова get_version из библиотеки my_library.dll внутри файла ruby, все в порядке (я только что запустил ruby test.rb .) Но если я сделаю следующее с IRB, похоже, что beagle.dll / cheetah.dll загружен неправильно, поэтому при выполнении check_version я получаю сообщение об ошибке.
irb -I .
require './test.rb'
irb_lib = MyLibClass.new
irb_lib.check_version # <- THIS FAILS
Am Мне нужно сделать дополнительный шаг в IRB, чтобы правильно загрузить библиотеки? Что-то мне не хватает?