Ruby-FFI는 동적으로 연결된 네이티브 라이브러리를 프로그래밍 방식으로 로드하고, 그 안에 함수를 바인딩하고, Ruby 코드에서 해당 함수를 호출하기 위한 gem입니다. 또한 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)에 gem을 설치하려면 다음이 필요합니다.
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
로 방지할 수 있습니다.
PaX(Gentoo, Alpine 등)로 실행되는 Linux 시스템에서 FFI는 mprotect
오류를 유발할 수 있습니다. 해결책을 찾을 때까지 당분간 Ruby에 대한 mprotect( paxctl -m [/path/to/ruby]
)를 비활성화해야 할 수도 있습니다.
FreeBSD 시스템에서 clang을 사용하여 gem을 컴파일하려면 pkgconf를 설치해야 합니다. pkg install pkgconf
패키지를 통해 설치하거나 devel/pkgconf
통해 포트에서 설치합니다.
JRuby 및 TruffleRuby에는 FFI gem을 설치하기 위한 요구 사항이 없으며, gem을 설치하지 않고도 require 'ffi'
(즉, gem은 이러한 구현에 사전 설치되어 있습니다).
루비젬에서:
[sudo] gem install ffi
git 또는 GitHub를 사용하여 Gemfile에서
gem 'ffi', github: 'ffi/ffi', submodules: true
또는 github의 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 라이선스로 보호됩니다. LICENSE 파일도 참조하세요. 스펙에는 ruby/spec과 동일한 라이선스인 MIT 라이선스가 적용됩니다.
다음 사람들은 코드를 제출하거나 버그 보고서를 제출했거나 이 프로젝트의 성공에 기여했습니다.