nanothief, сначала вы должны проконсультироваться со своим компилятором C, чтобы скомпилировать ваш код C в библиотеку.
Например, если предположить, что указанная выше функция находится в файле с именем MyLib.c, и предполагается, что вы используете GCC:
$ gcc -c MyLib.c
... что приводит к объектному файлу MyLib.o
$ gcc -shared -o MyLib.so MyLib.o
... что приводит к общему объекту MyLib.so, который является файлом вашей библиотеки (но имейте в виду, что хотя эта библиотека может хорошо скомпилироваться для меня в моей среде, она может не работать для вас в вашей среде).
Затем в вашем коде Ruby вам необходимо загрузить гем FFI с помощью:
require 'ffi'
Тем не менее, прелесть использования подхода FFI / Ruby заключается в том, что вам не нужно делать предположения о среде ваших пользователей драгоценных камней. Следовательно, в большинстве случаев ожидается, что библиотека, которую вы загружаете с помощью ffi_lib, уже скомпилирована и существует где-то на пути к библиотеке вашего компьютера пользователя gem.
С расширением C вы должны будете упаковать источник C вместе с вашим драгоценным камнем, и ваши пользователи будут сами компилировать источник C. Это может не работать, если ваши пользователи не имеют доступа к компилятору C для своей среды или если они используют JRuby (имеет ограниченную поддержку расширений C, IIRC).
Если вам интересно, вы можете взглянуть на этот камень, который я написал, который использует FFI .