我是Ubuntu和OpenCV的新手。为我的业余道歉。
我认为我搞砸了OpenCV安装。
我已经在2.4个月前安装了OpenCV。安装成功(使用CMake从源代码构建openCV)
几天后我也使用相同的程序安装了OpenCV 3.0。 当我的一个代码因为看似没有理由而给出了分段错误时,问题就出现了。根据朋友对Caffe神经网络问题论坛(https://github.com/BVLC/caffe/issues/3416)的建议,似乎我正在编译3.0标题但链接到2.4库。
我检查了/ usr / local / include。它有标准的openCv头文件(我不明白用3.0标题编译的方式')
在/ usr / local / lib中我有OpenCV 3.0库(根本没有2.4.8)。
现在编译成功,但是当我尝试运行它时,我收到以下错误。
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff76c49bc in cv::merge(cv::_InputArray const&,
cv::_OutputArray const&) ()
from /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4
只是添加
" pkg-config --modversion opencv" 3.0.0
而dpkg -l | grep libopencv 放弃了
Q.1>为什么我的代码链接到libopencv_core.so.2.4而不是3.0。我已经检入/ usr / local / lib并没有看到一个2.4库。我尝试在CMake中手动定义头文件和库的链接,但结果仍然相同。
Q.2> OpenCV标头有版本号吗?我不明白他们是如何被称为' 2.4标题'。我检查了源代码,但没有看到对某个版本库的任何特定要求。然后是什么要求链接到2.4版本库?
对不起,如果这是理论上的,但这对像我这样的初学者非常有益。如果当前的标题不合适,请对合适的问题标题发表评论。
由于
答案 0 :(得分:0)
您的opencv2.4库位于/usr/lib/x86_64-linux-gnu/
,而新的opencv3库很可能位于/ usr / local / lib中。链接器首先查看/usr/lib/x86_64-linux-gnu/
目录,然后首先找到opencv2.4库。要解决此问题,您可以通过将以下内容添加到/usr/local/lib
文件
~/.bashrc
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
按如下方式重新加载终端中的bashrc文件(或者只是关闭并重新打开终端):
source ~/.bashrc
更新库数据库:
sudo ldconfig
要检查链接器搜索库的顺序,可以使用以下命令:
ld -lopencv_core --verbose | grep attempt