在Ubuntu 12.04上使用Rice(Ruby)查找opencv共享库时出错

时间:2013-09-29 04:09:50

标签: c++ ruby opencv ubuntu ruby-c-extension

我正在尝试将OpenCV共享库正确链接到ruby c ++扩展,并且出于某种原因,对opencv库的任何调用has_library()都失败了。我将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

但由于某种原因,它似乎无法找到任何库。

真正奇怪的部分是两天前我在不同的ubuntu实例(也是12.04)上构建了所​​有内容(使用相同版本的opencv),一切正常。

我在stackoverflow上看了一会儿,发现了这个,这似乎是一个类似的问题,除了他在NetBSD上,我正在运行Ubuntu。

How to get Ruby to find a native lib?

不幸的是,似乎没有人确认过他的问题的解决方案,但是。

非常感谢任何帮助,谢谢。


编辑:

嗯,我使用的是ruby版本2.0.0-p247,我刚刚切换回1.9.3-p362,现在一切正常。


编辑2:

解决了它,有点儿。我不得不使用配置选项--enable-shared set重建ruby 1.9.3-p362。通过rvm,这将是:

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

0 个答案:

没有答案