ruby-ffi http://wiki.github.com/ffi/ffi

Description

Ruby-FFI is a ruby extension for programmatically loading dynamic
libraries, binding functions within them, and calling those functions
from Ruby code. Moreover, a Ruby-FFI extension works without changes
on Ruby and JRuby. Discover why should you write your next extension
using Ruby-FFI here.

Features/problems

  • Intuitive DSL
  • Supports all C native types
  • C structs (also nested), enums and global variables
  • Callbacks from C to ruby
  • Automatic garbage collection of native memory

Synopsis

require 'ffi'

module MyLib
extend FFI::Library
ffi_lib 'c'
attach_function :puts, [ :string ], :int
end

MyLib.puts 'Hello, World using libc!'

For less minimalistic and more sane examples you may look at:

Requirements

  • You need a sane building environment in order to compile the extension.

Installation

From rubygems:

[sudo] gem install ffi

or from the git repository on github:

git clone git://github.com/ffi/ffi.git
cd ffi
rake gem:install

License

See LICENSE file.

Credits

The following people have submitted code, bug reports, or otherwide contributed to the success of this project:

  • Alban Peignier
  • Aman Gupta
  • Andrea Fazzi
  • Andreas Niederl
  • Andrew Cholakian
  • Antonio Terceiro
  • Brian Candler
  • Brian D. Burns
  • Bryan Kearney
  • Charlie Savage
  • Chikanaga Tomoyuki
  • Hongli Lai
  • Ian MacLeod
  • Jake Douglas
  • Jean-Dominique Morani
  • Jeremy Hinegardner
  • Jesús García Sáez
  • Joe Khoobyar
  • Jurij Smakov
  • KISHIMOTO, Makoto
  • Kim Burgestrand
  • Lars Kanis
  • Luc Heinrich
  • Luis Lavena
  • Matijs van Zuijlen
  • Matthew King
  • Mike Dalessio
  • NARUSE, Yui
  • Park Heesob
  • Shin Yee
  • Stephen Bannasch
  • Suraj N. Kurapati
  • Sylvain Daubert
  • Victor Costan
  • beoran@gmail.com
  • ctide
  • emboss
  • hobophobe
  • meh
  • postmodern
  • wycats@gmail.com
  • Wayne Meissner