Как упаковать библиотеку и ffi-интерфейс как гем? Возможный?
Я создал библиотеку для проекта, над которым я работал. По сути, он упаковывает imgSeek в качестве альтернативы pHash/phashion. Смотрите эту ссылку для фона:
http://hackerlabs.org/blog/2012/07/30/organizing-photos-with-duplicate-and-similarity-checking/
Библиотека состоит из разделяемой библиотеки C/C++ (с makefile & shit) и привязками ruby-ffi. Я хотел упаковать это, чтобы другие люди могли использовать это, но я действительно не знаю как.
Сайт rubygems документирует упаковку драгоценного камня с расширениями C, но не тем, что я хочу.
Я не уверен, возможно ли это. Возможно, я должен опубликовать библиотеку, скажем, как обычный пакет операционной системы (например,.deb), а затем опубликовать привязки ffi в виде гема и попросить пользователя установить их отдельно. Это звучит как большая работа.
Можно ли упаковать привязки ffi и библиотеку вместе, чтобы установка гема вызывала сборку библиотеки? Лично для меня намного проще передать этот код любому, кто захочет его использовать.
Код здесь:
https://bitbucket.org/dradetsky/ruby-seeklib
https://bitbucket.org/dradetsky/seeklib
1 ответ
Это то, что делает гем ffi-compiler.
Вы пишете Rakefile, который использует mkmf-подобный синтаксис, чтобы определить, как построить ваш проект, а затем используете предоставленные помощники для загрузки вашей библиотеки (поскольку встроенная библиотека не будет ни в одном из стандартных путей поиска).
Я не верю, что вы можете собрать прямо из вашего Makefile, однако он кажется достаточно простым, чтобы его было легко перевести - единственное, что, кажется, не документировано, это как изменить флаги, передаваемые компилятору, но выглядит лайк
FFI::Compiler::CompileTask.new('example') do |c|
c.cflags << '-O2'
end
должен сделать это.