Ruby-FFI عبارة عن جوهرة لتحميل المكتبات الأصلية المرتبطة ديناميكيًا برمجيًا، وربط الوظائف داخلها، واستدعاء تلك الوظائف من كود روبي. علاوة على ذلك، يعمل امتداد Ruby-FFI دون إجراء تغييرات على CRuby (MRI)، وJRuby، وRubinius، وTruffleRuby. اكتشف لماذا يجب عليك كتابة الامتداد التالي باستخدام Ruby-FFI.
require 'ffi'
module MyLib
extend FFI :: Library
ffi_lib 'c'
attach_function :puts , [ :string ] , :int
end
MyLib . puts 'Hello, World using libc!'
للحصول على أمثلة أقل بساطة ومزيدًا من الأمثلة، يمكنك الاطلاع على:
samples/
المجلدعند تثبيت الجوهرة على CRuby (MRI)، ستحتاج إلى:
gcc
أو clang
على كل شيء آخر) بشكل اختياري (يسرع عملية التثبيت):libffi
ورؤوس التطوير - يوجد هذا بشكل شائع في حزم libffi-dev
أو libffi-devel
تأتي جوهرة ffi مع إصدار libffi مدمج، والذي يتم استخدامه عندما لا تكون مكتبة libffi الخاصة بالنظام متاحة أو قديمة جدًا. يمكن فرض استخدام النظام libffi عن طريق:
gem install ffi -- --enable-system-libffi # to install the gem manually
bundle config build.ffi --enable-system-libffi # for bundle install
أو تم منعه بواسطة --disable-system-libffi
.
في أنظمة Linux التي تعمل مع PaX (Gentoo وAlpine وما إلى ذلك)، قد يؤدي FFI إلى حدوث أخطاء mprotect
. قد تحتاج إلى تعطيل mprotect for Ruby ( paxctl -m [/path/to/ruby]
) في الوقت الحالي حتى يتم العثور على حل.
في أنظمة FreeBSD، يجب تثبيت pkgconf حتى تتمكن الجوهرة من التجميع باستخدام clang. قم بالتثبيت إما عبر الحزم pkg install pkgconf
أو من المنافذ عبر devel/pkgconf
.
في JRuby وTruffleRuby، لا توجد متطلبات لتثبيت جوهرة FFI، require 'ffi'
حتى بدون تثبيت الجوهرة (أي أن الجوهرة مثبتة مسبقًا على هذه التطبيقات).
من جواهر الياقوت:
[sudo] gem install ffi
من Gemfile باستخدام git أو GitHub
gem 'ffi', github: 'ffi/ffi', submodules: true
أو من مستودع git على جيثب:
git clone git://github.com/ffi/ffi.git
cd ffi
git submodule update --init --recursive
bundle install
rake install
--enable-system-libffi
: فرض استخدام نظام libffi--disable-system-libffi
: فرض استخدام libffi المدمج--enable-libffi-alloc
: فرض إغلاق التخصيص بواسطة libffi--disable-libffi-alloc
: فرض إغلاق التخصيص بطريقة مدمجة مكتبة ffi مغطاة بترخيص BSD، راجع أيضًا ملف الترخيص. المواصفات مغطاة بنفس الترخيص مثل Ruby/spec، ترخيص MIT.
لقد أرسل الأشخاص التاليون تعليمات برمجية أو تقارير أخطاء أو ساهموا بطريقة أخرى في نجاح هذا المشروع: