Мне нужно использовать драгоценный камень от MacRuby (рубиновый брелок), и этот драгоценный камень использует FFI.FFI от MacRuby?
Но похоже, что FFI не работает с MacRuby.
Использование IRB консоли, она отлично работает:
cobalt:~ charbon$ irb
irb(main):001:0> require 'ffi'
=> true
irb(main):002:0> module MyLib
irb(main):003:1> extend FFI::Library
irb(main):004:1> ffi_lib 'c'
irb(main):005:1> attach_function :puts, [ :string ], :int
irb(main):006:1> end
=> #<FFI::Function address=0x007fff8be0197b>
irb(main):007:0> MyLib.puts 'Hello, World using libc!'
Hello, World using libc!
Но как только я переключиться на macirb консоли (поставляемым по MacRuby), он не
cobalt:~ charbon$ macirb
irb(main):001:0> require 'ffi'
=> true
irb(main):002:0>
=> nil
irb(main):003:0> module MyLib
irb(main):004:1> extend FFI::Library
irb(main):005:1> ffi_lib 'c'
irb(main):006:1> attach_function :puts, [ :string ], :int
irb(main):007:0> end
NoMethodError: undefined method `ffi_lib' for MyLib:Class
ПГНВ FFI установлен в системе
cobalt:~ charbon$ macgem list
*** LOCAL GEMS ***
corefoundation (0.1.4)
ffi (1.9.0)
ruby-keychain (0.1.1)
Я искал все, что мог.
https://github.com/MacRuby/MacRuby/blob/master/lib/ffi.rb говорит FFI встроен в MacRuby
нашел несколько сообщений по сети с тем же вопросом, но без ответа (просто поставить один, а не хватает респ для более) https://github.com/kreynolds/phidgets-ffi/issues/4
Надеюсь, кто-то может помочь! Я работаю с os X 10.8.3, ruby 1.9.3, macruby 1.9.2
Реализация FFI от Macruby отстает от того, что делает MRI gem и jruby, к сожалению, –
Что вы делаете с 'ffi'? Красота «macruby» - это возможность доступа к статическим API, что означает функции C, структуры, непрозрачные типы. – jtomschroeder
в очень короткий срок: пытается получить рубиновый брелок. В краткосрочной перспективе используйте класс, который казался самым последним/полным. В среднесрочной перспективе лучше понять макроуры и внешние библиотеки. В долгосрочной перспективе все мы будем мертвы (Keynes) – MichaelC