Ruby-FFI ist ein Juwel zum programmgesteuerten Laden dynamisch verknüpfter nativer Bibliotheken, zum Binden von Funktionen darin und zum Aufrufen dieser Funktionen aus Ruby-Code. Darüber hinaus funktioniert eine Ruby-FFI-Erweiterung ohne Änderungen auf CRuby (MRI), JRuby, Rubinius und TruffleRuby. Entdecken Sie, warum Sie Ihre nächste Erweiterung mit Ruby-FFI schreiben sollten.
require 'ffi'
module MyLib
extend FFI :: Library
ffi_lib 'c'
attach_function :puts , [ :string ] , :int
end
MyLib . puts 'Hello, World using libc!'
Für weniger minimalistische und mehr Beispiele können Sie sich Folgendes ansehen:
samples/
“.Wenn Sie das Gem auf CRuby (MRI) installieren, benötigen Sie:
gcc
oder clang
auf allem anderen) Optional (beschleunigt die Installation):libffi
-Bibliothek und die Entwicklungsheader – diese befinden sich üblicherweise in den Paketen libffi-dev
oder libffi-devel
Das ffi-Gem verfügt über eine integrierte libffi-Version, die verwendet wird, wenn die libffi-Bibliothek des Systems nicht verfügbar oder zu alt ist. Die Nutzung des Systems libffi kann erzwungen werden durch:
gem install ffi -- --enable-system-libffi # to install the gem manually
bundle config build.ffi --enable-system-libffi # for bundle install
oder durch --disable-system-libffi
verhindert.
Auf Linux-Systemen, die mit PaX laufen (Gentoo, Alpine usw.), kann FFI mprotect
Fehler auslösen. Möglicherweise müssen Sie mprotect für Ruby ( paxctl -m [/path/to/ruby]
) vorerst deaktivieren, bis eine Lösung gefunden ist.
Auf FreeBSD-Systemen muss pkgconf installiert sein, damit das Gem mit Clang kompiliert werden kann. Installieren Sie entweder über Pakete pkg install pkgconf
oder von Ports über devel/pkgconf
.
Auf JRuby und TruffleRuby gibt es keine Anforderungen für die Installation des FFI-Gems, und require 'ffi'
funktioniert auch ohne Installation des Gems (d. h. das Gem ist bei diesen Implementierungen vorinstalliert).
Von rubygems:
[sudo] gem install ffi
Aus einer Gemfile mit Git oder GitHub
gem 'ffi', github: 'ffi/ffi', submodules: true
oder aus dem Git-Repository auf Github:
git clone git://github.com/ffi/ffi.git
cd ffi
git submodule update --init --recursive
bundle install
rake install
--enable-system-libffi
: Nutzung der System-Libffi erzwingen--disable-system-libffi
: Verwendung der integrierten libffi erzwingen--enable-libffi-alloc
: Schließungszuweisung durch libffi erzwingen--disable-libffi-alloc
: Abschlusszuweisung durch integrierte Methode erzwingen Die FFI-Bibliothek unterliegt der BSD-Lizenz, siehe auch die LICENSE-Datei. Die Spezifikationen unterliegen derselben Lizenz wie Ruby/Spec, der MIT-Lizenz.
Die folgenden Personen haben Code eingereicht, Fehlerberichte übermittelt oder auf andere Weise zum Erfolg dieses Projekts beigetragen: