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:
- the samples/ folder
- the examples on the wiki
- the projects using FFI listed on this page (http://wiki.github.com/ffi/ffi/projects-using-ffi)
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