Ruby-FFI เป็นอัญมณีสำหรับการโหลดไลบรารีเนทิฟที่เชื่อมโยงแบบไดนามิกโดยทางโปรแกรม การรวมฟังก์ชันภายในไลบรารี และการเรียกใช้ฟังก์ชันเหล่านั้นจากโค้ด Ruby นอกจากนี้ ส่วนขยาย 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 gem มาพร้อมกับเวอร์ชัน 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 สำหรับ ruby ( paxctl -m [/path/to/ruby]
) ในขณะนี้จนกว่าจะพบวิธีแก้ปัญหา
บนระบบ FreeBSD ต้องติดตั้ง pkgconf เพื่อให้ gem สามารถคอมไพล์โดยใช้เสียงดังกราวได้ ติดตั้งผ่านแพ็คเกจ pkg install pkgconf
หรือจากพอร์ตผ่าน devel/pkgconf
บน JRuby และ TruffleRuby ไม่มีข้อกำหนดในการติดตั้ง FFI gem และ require 'ffi'
ทำงานได้โดยไม่ต้องติดตั้ง gem (กล่าวคือ gem ได้รับการติดตั้งไว้ล่วงหน้าในการใช้งานเหล่านี้)
จากทับทิม:
[sudo] gem install ffi
จาก Gemfile โดยใช้ git หรือ GitHub
gem 'ffi', github: 'ffi/ffi', submodules: true
หรือจากที่เก็บ git บน github:
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
บุคคลต่อไปนี้ได้ส่งรหัส รายงานข้อผิดพลาด หรือมีส่วนทำให้โครงการนี้ประสบความสำเร็จ: