2015-05-13 1 views
0

Я создал библиотеку для проекта, над которым я работал. По сути, он упаковывает imgSeek в качестве альтернативы pHash/phashion. Смотрите эту ссылку для фона:Как упаковать библиотеку и ffi-интерфейс как драгоценный камень? Возможное?

http://hackerlabs.org/blog/2012/07/30/organizing-photos-with-duplicate-and-similarity-checking/

Библиотека состоит из C/C++ разделяемую библиотеку (с Makefile & говна) и рубин-FFI привязок. Я хотел упаковать это, чтобы другие люди могли его использовать, но я действительно не знаю, как это сделать.

Документы на сайте rubygems упаковывают драгоценный камень с расширениями C, но не то, что я хочу.

Я не уверен, что это возможно. Возможно, я должен опубликовать библиотеку, например, обычный пакет операционной системы (например, .deb), а затем опубликовать привязки ffi как драгоценный камень и установить их отдельно. Это звучит как много работы.

Можно ли объединить привязки ffi и библиотеку вместе, чтобы установка драгоценного камня вызывала создание библиотеки? Это облегчит мне лично, чтобы получить этот код для всех, кто захочет его использовать.

Код здесь:

https://bitbucket.org/dradetsky/ruby-seeklib

https://bitbucket.org/dradetsky/seeklib

https://github.com/dradetsky/ruby-seeklib

https://github.com/dradetsky/seeklib

ответ

0

Это то, что делает ffi-compiler камень.

Вы пишете файл Rakefile, который использует синтаксис типа mkmf, чтобы определить, как построить проект, а затем использовать предоставленные помощники для загрузки вашей библиотеки (поскольку встроенная библиотека не будет ни в одном из стандартных путей поиска) ,

Я не верю, что вы можете построить прямо из своего файла Makefile, однако кажется, что он достаточно прост, чтобы его было легко перевести - единственное, что, похоже, не документировано, - это как изменить флаги, переданные компилятору , но он выглядит как

FFI::Compiler::CompileTask.new('example') do |c| 
    c.cflags << '-O2' 
end 

должен сделать это.