Ruby-FFI adalah permata untuk memuat pustaka asli yang tertaut secara dinamis secara terprogram, mengikat fungsi di dalamnya, dan memanggil fungsi tersebut dari kode Ruby. Selain itu, ekstensi Ruby-FFI berfungsi tanpa perubahan pada CRuby (MRI), JRuby, Rubinius, dan TruffleRuby. Temukan mengapa Anda harus menulis ekstensi berikutnya menggunakan Ruby-FFI.
require 'ffi'
module MyLib
extend FFI :: Library
ffi_lib 'c'
attach_function :puts , [ :string ] , :int
end
MyLib . puts 'Hello, World using libc!'
Untuk contoh yang kurang minimalis dan lebih banyak lagi, Anda dapat melihat:
samples/
folderSaat memasang permata di CRuby (MRI), Anda memerlukan:
gcc
, atau clang
di yang lainnya) Opsional (mempercepat instalasi):libffi
dan header pengembangan - ini biasanya ada di paket libffi-dev
atau libffi-devel
Permata ffi hadir dengan versi libffi bawaan, yang digunakan, ketika perpustakaan libffi sistem tidak tersedia atau terlalu tua. Penggunaan sistem libffi dapat ditegakkan dengan:
gem install ffi -- --enable-system-libffi # to install the gem manually
bundle config build.ffi --enable-system-libffi # for bundle install
atau dicegah oleh --disable-system-libffi
.
Pada sistem Linux yang menjalankan PaX (Gentoo, Alpine, dll.), FFI dapat memicu kesalahan mprotect
. Anda mungkin perlu menonaktifkan mprotect untuk Ruby ( paxctl -m [/path/to/ruby]
) untuk sementara waktu hingga solusi ditemukan.
Pada sistem FreeBSD, pkgconf harus diinstal agar permata dapat dikompilasi menggunakan clang. Instal melalui paket pkg install pkgconf
atau dari port melalui devel/pkgconf
.
Pada JRuby dan TruffleRuby, tidak ada persyaratan untuk menginstal permata FFI, dan require 'ffi'
berfungsi bahkan tanpa menginstal permata (yaitu, permata sudah diinstal sebelumnya pada implementasi ini).
Dari rubygem:
[sudo] gem install ffi
Dari Gemfile menggunakan git atau GitHub
gem 'ffi', github: 'ffi/ffi', submodules: true
atau dari repositori git di github:
git clone git://github.com/ffi/ffi.git
cd ffi
git submodule update --init --recursive
bundle install
rake install
--enable-system-libffi
: Memaksa penggunaan sistem libffi--disable-system-libffi
: Memaksa penggunaan libffi bawaan--enable-libffi-alloc
: Alokasi penutupan paksa oleh libffi--disable-libffi-alloc
: Alokasi penutupan paksa dengan metode bawaan Perpustakaan ffi dilindungi oleh lisensi BSD, lihat juga file LICENSE. Spesifikasi dilindungi oleh lisensi yang sama dengan ruby/spec, yaitu lisensi MIT.
Orang-orang berikut telah mengirimkan kode, laporan bug, atau berkontribusi terhadap keberhasilan proyek ini: