Ошибка при поиске общих библиотек opencv с Rice (Ruby) в Ubuntu 12.04

Я пытаюсь правильно связать разделяемые библиотеки OpenCV с расширением ruby ​​c ++, и по какой-то причине любой вызов метода have_library () завершается неудачно для библиотек opencv. Я установил opencv в / usr / local, чтобы заголовочные файлы были в / usr / local / include, а библиотеки — в / usr / local / lib. Я приложу свой extconf.rb и соответствующий вывод ниже.

require "mkmf-rice"
dir_config("opencv_core", "/usr/local/include", "/usr/local/lib")
unless have_library("opencv_core")
raise "Could not find opencv_core"end

dir_config("opencv_flann", "/usr/local/include", "/usr/local/lib")
unless have_library("opencv_flann")
raise "Could not find opencv_flann"end

dir_config("opencv_highgui", "/usr/local/include", "/usr/local/lib")
unless have_library("opencv_highgui")
raise "Could not find opencv_highgui"end

dir_config("opencv_features2d", "/usr/local/include", "/usr/local/lib")
unless have_library("opencv_features2d")
raise "Could not find opencv_features2d"end

dir_config("opencv_nonfree", "/usr/local/include", "/usr/local/lib")
unless have_library("opencv_nonfree")
raise "Could not find opencv_nonfree"end

dir_config("opencv_objdetect", "/usr/local/include", "/usr/local/lib")
unless have_library("opencv_objdetect")
raise "Could not find opencv_objdetect"end

create_makefile("something")

Запуск $ ruby ​​extconf.rb выдает следующую ошибку, указывающую, что он не может найти общую библиотеку для opencv_core. Я также попробовал другую библиотеку самостоятельно, и все они также потерпели неудачу.

checking for main() in -lopencv_core... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/home/alec/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
--with-libpath
--without-libpath
--with-opencv_core-dir
--without-opencv_core-dir
--with-opencv_core-include
--without-opencv_core-include=${opencv_core-dir}/include
--with-opencv_core-lib
--without-opencv_core-lib=${opencv_core-dir}/
--with-opencv_corelib
--without-opencv_corelib
extconf.rb:7:in `<main>': Could not find opencv_core (RuntimeError)

И в начале mkmf.log содержит следующее:

home/alec/.rvm/gems/ruby-2.0.0-p247/gems/rice-1.5.1/ruby/lib/mkmf-rice.rb:136:in `link_command': Use RbConfig instead of obsolete and deprecated Config.
have_library: checking for main() in -lopencv_core... -------------------- no

/home/alec/.rvm/gems/ruby-2.0.0-p247/gems/rice-1.5.1/ruby/lib/mkmf-rice.rb:136:in `link_command': Use RbConfig instead of obsolete and deprecated Config.
/home/alec/.rvm/gems/ruby-2.0.0-p247/gems/rice-1.5.1/ruby/lib/mkmf-rice.rb:136:in `link_command': Use RbConfig instead of obsolete and deprecated Config.
/home/alec/.rvm/gems/ruby-2.0.0-p247/gems/rice-1.5.1/ruby/lib/mkmf-rice.rb:136:in `link_command': Use RbConfig instead of obsolete and deprecated Config.
"g++ -o conftest -I/home/alec/.rvm/rubies/ruby-2.0.0-p247/include/ruby-2.0.0/x86_64-linux -I/home/alec/.rvm/rubies/ruby-2.0.0-p247/include/ruby-2.0.0/ruby/backward -I/home/alec/.rvm/rubies/ruby-2.0.0-p247/include/ruby-2.0.0 -I. -I/usr/local/include     -I/home/alec/.rvm/gems/ruby-2.0.0-p247/gems/rice-1.5.1/ruby/lib/include  -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -L/home/alec/.rvm/rubies/ruby-2.0.0-p247/lib -Wl,-R/home/alec/.rvm/rubies/ruby-2.0.0-p247/lib -L/usr/local/lib -Wl,-R/usr/local/lib -L. -fstack-protector -rdynamic -Wl,-export-dynamic  -L/home/alec/.rvm/gems/ruby-2.0.0-p247/gems/rice-1.5.1/ruby/lib/lib -lrice     -Wl,-R -Wl,/home/alec/.rvm/rubies/ruby-2.0.0-p247/lib -L/home/alec/.rvm/rubies/ruby-2.0.0-p247/lib -lruby  -lpthread -lrt -ldl -lcrypt -lm   -lc"cc1plus: warning: command line option ‘-Wdeclaration-after-statement’ is valid for C/ObjC but not for C++ [enabled by default]
cc1plus: warning: command line option ‘-Wimplicit-function-declaration’ is valid for C/ObjC but not for C++ [enabled by default]
checked program was:

Команда g ++, кажется, показывает, что она правильно ищет заголовки в / usr / local / include и что она также правильно ищет библиотеки в / usr / local / lib из флагов:

-I/usr/local/include
-L/usr/local/lib

но по какой-то причине он не может найти ни одну из библиотек.

Действительно странная часть состоит в том, что два дня назад я собрал все (с той же версией opencv) на другом экземпляре Ubuntu (также 12.04), и все работало нормально.

Я какое-то время оглядывался на stackoverflow и обнаружил, что, похоже, такая же проблема, за исключением того, что он работает на NetBSD, а я использую Ubuntu.

Как заставить Ruby найти родную библиотеку?

К сожалению, похоже, еще никто не подтвердил решение его проблемы.

Любая помощь будет принята с благодарностью, спасибо.


РЕДАКТИРОВАТЬ:

Хм, я использовал ruby ​​версии 2.0.0-p247 и просто переключился обратно на 1.9.3-p362, и теперь все работает нормально.


РЕДАКТИРОВАТЬ 2:

Решил, вроде. Мне пришлось пересобрать ruby ​​1.9.3-p362 с опцией конфигурации —enable-shared set. Через rvm это будет:

$ rvm install 1.9.3-p362 -C --enable-shared

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]