Skip to content
This repository

Merge pull request #300 from larskanis/fix-spec-for-mingw32

Fix test case so that it works on x86-mingw32 platform.
latest commit 2ae64ccf11
Thomas E Enebo enebo authored
Octocat-spinner-32 bench Add to_str and to_ptr benchmarks January 07, 2013
Octocat-spinner-32 ext Fix invalid memory access caused by double dereferencing mapped types… November 05, 2013
Octocat-spinner-32 gen Keep a log of generated types.conf files November 13, 2011
Octocat-spinner-32 lib cleanup minor typos November 02, 2013
Octocat-spinner-32 libtest Licensing audit. Restore BSD license text from files where it was mis… October 27, 2013
Octocat-spinner-32 nbproject Add custom data converters for parameter and return types May 22, 2010
Octocat-spinner-32 samples Fix qsort example for 64bit December 12, 2009
Octocat-spinner-32 spec Merge pull request #300 from larskanis/fix-spec-for-mingw32 November 05, 2013
Octocat-spinner-32 .gitignore Ignore YARD-generated files August 06, 2011
Octocat-spinner-32 .travis.yml Am I doing this right yet? October 29, 2013
Octocat-spinner-32 .yardopts Don’t explicitly state markdown markup in YARD options August 06, 2011
Octocat-spinner-32 COPYING Switch license to BSD throughout codebase. See #288. October 29, 2013
Octocat-spinner-32 Gemfile Update Gemfile April 12, 2013
Octocat-spinner-32 Gemfile.lock Update Gemfile April 12, 2013
Octocat-spinner-32 LICENSE Switch license to BSD throughout codebase. See #288. October 29, 2013
Octocat-spinner-32 LICENSE.SPECS Change licensing of the specs to the same license as Rubyspec November 25, 2012
Octocat-spinner-32 Switch license to BSD throughout codebase. See #288. October 29, 2013
Octocat-spinner-32 Rakefile Tweaks to get java gem building. October 30, 2013
Octocat-spinner-32 ffi.gemspec Remember kids...when you rush things you end up putting weird errant … October 30, 2013

ruby-ffi Build Status


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 you should write your next extension using Ruby-FFI.


  • 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


require 'ffi'

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

MyLib.puts 'Hello, World using libc!'

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


You need a sane building environment in order to compile the extension. At a minimum, you will need:

  • A C compiler (e.g. Xcode on OSX, gcc on everything else)
  • libffi development library - this is commonly in the libffi-dev or libffi-devel


From rubygems:

[sudo] gem install ffi

or from the git repository on github:

git clone git://
cd ffi
rake gem:install


The ffi library is covered by the BSD license, also see the LICENSE file. The specs are shared with Rubyspec and are licensed by the same license as Rubyspec, see the LICENSE.SPECS file.


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

Something went wrong with that request. Please try again.