zhuifengsn

zhuifengsn

0个粉丝

7

问答

0

专栏

0

资料

zhuifengsn  发布于  2015-02-01 13:16:09
采纳率 0%
7个问答
9733

Hi3515,编译opencv2.4.9,个人经验分享,欢迎补充

本帖最后由 zhuifengsn 于 2015-2-1 13:23 编辑

        安装opencv问题详解
        我使用的是redhat 9.0,先安装了海思3515官方配套的SDK,gcc版本为3.4.3。在redhat下使用的是cmake3.1.1,是直接用已经编译好的程序,包含cmake-gui。鄙人私下认为,Linux系统版本和cmake的版本对于opencv的安装应该是没有什么影响的。不过,不同的安装环境的确会导致在安装过程中出现各种不同类型的错误。下图是安装好的arm-gcc相关编译工具。

安装步骤:
①配置cmake
选择源码文件夹(解压源码所得的文件夹),选择编译目录(自己建立一个目录),选择编译器和头文件目录。

如下图,operation stystem和version processor随便写,编译器分别选择gcc和g++,targetroot选择arm-linux编译器的头文件目录,我这里是
/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include/。点击finish完成。

然后,华丽丽地报错了。

查看错误提示,提到了CUDA,后来查了下,arm-linux没有相关的库。在列表中取消所有与CUBA相关的项,重新点击configure。没有报错了。

由于arm-linux有很多库是没有的,所以在配置这一步还要取消很多的选项。具体配置如下:


再点击Generate,生成makefiles。然后,进入build目录,开始make。出错,提示:
/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/../../gcc-3.4.3-uClibc-0.9.28//usr/include/stdlib.h:691: error: syntax error before '*' token

/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/../../gcc-3.4.3-uClibc-0.9.28//usr/include/stdlib.h:695: error: syntax error before "wchar_t"

/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/../../gcc-3.4.3-uClibc-0.9.28//usr/include/stdlib.h:699: error: syntax error before '*' token

/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/../../gcc-3.4.3-uClibc-0.9.28//usr/include/stdlib.h:703: error: syntax error before '*' token
make[2]: ***
[3rdparty/zlib/CMakeFiles/zlib.dir/gzclose.c.obj] Error 1
make[1]: ***
[3rdparty/zlib/CMakeFiles/zlib.dir/all] Error 2
make: *** [all] Error 2

解决办法:打开stdlib.h文件,将684行和706行的#ifdef….   #endif注释取消。

继续make,然后出错。提示:
In file included from
/root/opencv/opencv-2.4.9/modules/core/include/opencv2/core/core.hpp:4855,
                 
                  from /root/opencv/opencv-2.4.9/modules/core/src/precomp.hpp:48,
                              
                  from /root/opencv/opencv-2.4.9/modules/core/src/algorithm.cpp:43:

/root/opencv/opencv-2.4.9/modules/core/include/opencv2/core/operations.hpp:4024: error: got 2 template parameters for `void cv::AlgorithmInfo::addParam(cv::Algorithm&, const char*, cv:: Ptr<_Tp2>&, bool, cv::  Ptr<_Tp2> (cv::Algorithm::*)(), void (cv::Algorithm::*)(const cv:: Ptr<_Tp2>&), const std::string&)'

/root/opencv/opencv-2.4.9/modules/core/include/opencv2/core/operations.hpp:4024: error:   but 1 required

/root/opencv/opencv-2.4.9/modules/core/include/opencv2/core/operations.hpp:4033: error: redefinition of `void cv::AlgorithmInfo::addParam(cv::Algorithm&, const char*, cv:: Ptr<_Tp2>&, bool, cv:: Ptr<_Tp2> (cv::Algorithm::*)(), void (cv::Algorithm::*)(const cv:: Ptr<_Tp2>&), const std::string&)'

/root/opencv/opencv-2.4.9/modules/core/include/opencv2/core/operations.hpp:4024: error: `void cv::AlgorithmInfo::addParam(cv::Algorithm&, const char*, cv:: Ptr<_Tp2>&, bool, cv::Ptr<_Tp2> (cv::Algorithm::*)(), void (cv::Algorithm::*)(const cv:: Ptr<_Tp2>&), const std::string&)' previously declared here
make[2]: ***
[modules/core/CMakeFiles/opencv_core.dir/src/algorithm.cpp.obj] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make: *** [all] Error 2

解决办法:进入operations.hpp,将4021行的那个函数注释掉。

继续make,然后又有新错误出现了。
In file included from /root/opencv/opencv-2.4.9/modules/core/src/precomp.hpp:48,
                 from /root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp:43:
/root/opencv/opencv-2.4.9/modules/core/include/opencv2/core/core.hpp:4826: warning: `class cv::TLSDataContainer' has virtual functions but non-virtual destructor
/root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp:48:19: wchar.h: No such file or directory
/root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp: In function `std::string cv::fromUtf16(const cv::WString&)':
/root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp:166: error: `wcstombs' undeclared (first use this function)
/root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp:166: error: (Each undeclared identifier is reported only once for each function it appears in.)
/root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp: In function `cv::WString cv::toUtf16(const std::string&)':
/root/opencv/opencv-2.4.9/modules/core/src/persistence.cpp:178: error: `mbstowcs' undeclared (first use this function)
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/persistence.cpp.obj] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make: *** [all] Error 2

解决办法:wchar.h文件其实在usr/include/bits目录下,故打开persistence.cpp文件,在48行处,将#include改为#include,错误减少了,但没有解决。还是会提示wcstombs函数没有定义。该函数包含在stdlib.h里,进入该头文件,将684行和706行的#ifdef和#endif注释掉,错误解决。

继续make,然后继续出错提示:
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:898: error: `pthread_spin_init' undeclared (first use this function)
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:898: error: (Each undeclared identifier is reported only once for each function it appears in.)
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In destructor `cv::Mutex::Impl::~Impl()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:899: error: `pthread_spin_destroy' undeclared (first use this function)/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In member function `void cv::Mutex::Impl::lock()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:901: error: `pthread_spin_lock' undeclared (first use this function)
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In member function `bool cv::Mutex::Impl::trylock()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:902: error: `pthread_spin_trylock' undeclared (first use this function)/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In member function `void cv::Mutex::Impl::unlock()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:903: error: `pthread_spin_unlock' undeclared (first use this function)
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/system.cpp.obj] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make: *** [all] Error 2

解决办法:直接将893行到908行的条件编译代码注释掉,问题解决。

继续make,然后出错。提示:
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:898: error: `pthread_spin_init' undeclared (first use this function)
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:898: error: (Each undeclared identifier is reported only once for each function it appears in.)
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In destructor `cv::Mutex::Impl::~Impl()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:899: error: `pthread_spin_destroy' undeclared (first use this function)/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In member function `void cv::Mutex::Impl::lock()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:901: error: `pthread_spin_lock' undeclared (first use this function)
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In member function `bool cv::Mutex::Impl::trylock()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:902: error: `pthread_spin_trylock' undeclared (first use this function)/root/opencv/opencv-2.4.9/modules/core/src/system.cpp: In member function `void cv::Mutex::Impl::unlock()':
/root/opencv/opencv-2.4.9/modules/core/src/system.cpp:903: error: `pthread_spin_unlock' undeclared (first use this function)
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/system.cpp.obj] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make: *** [all] Error 2

解决办法:test文件编译出错,进入cmake-gui,取消ts模块的勾选。该模块是用于测试的,可以不用勾选。重新configure和generation。错误解决。

继续make,然后出错,提示:
/root/opencv/opencv-2.4.9/modules/legacy/src/pyrsegmentation.cpp: In function `CvStatus icvPyrSegmentation8uC3R(uchar*, int, uchar*, int, CvSize, int, CvSeq**, CvMemStorage*, int, int, int)':
/root/opencv/opencv-2.4.9/modules/legacy/src/pyrsegmentation.cpp:1023: internal compiler error: in verify_local_live_at_start, at flow.c:546
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to [email]arm-gnu@codesourcery.com[/email] for instructions.
make[2]: *** [modules/legacy/CMakeFiles/opencv_legacy.dir/src/pyrsegmentation.cpp.obj] Error 1
make[1]: *** [modules/legacy/CMakeFiles/opencv_legacy.dir/all] Error 2
make: *** [all] Error 2

解决办法:进入pyrsegmentation.cpp,将CvStatus icvPyrSegmentation8uC3R函数里的代码清空,直接在函数里填上”return CV_OK;”,问题解决。

继续make,然后终于完成了。输入命令make install,完成安装。终于完成了,看到这一路遇到这么多错误,我也是醉了。

最后申明一下:由于本人也是新手上路,上述的解决办法仅供参考。这些解决办法,一部分来源百度,一部分来源于自己尝试探索还有一部分来自于本论坛的9crk大神的指导。欢迎大家补充各类错误及解决办法,欢迎拍砖。
最后,感谢9crk兄弟和bai华兄弟的无私帮助与分享。
我来回答
回答5个
时间排序
认可量排序

zhuifengsn

0个粉丝

7

问答

0

专栏

0

资料

zhuifengsn 2015-02-01 13:22:47
认可0
另外,我记得有一次编译还遇到一个cvsample.cpp相关的错误,最后的办法是在cmake取消了apps的勾选,就是不编译opencv的例程。然后,那个错误就解决了。

ebaina_

0个粉丝

82

问答

40

专栏

0

资料

ebaina_ 2015-02-07 13:33:15
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=12121&ptid=5328]zhuifengsn 发表于 2015-2-1 13:22[/url]
另外,我记得有一次编译还遇到一个cvsample.cpp相关的错误,最后的办法是在cmake取消了apps的勾选,就是不 ...[/quote]

LZ 联系我QQ(论坛下方),并站内消息你的手机,论坛奖励话费100 元。

悦分享,越快乐。

867241432

0个粉丝

9

问答

0

专栏

0

资料

867241432 2015-03-22 19:11:35
认可0
楼主你好,我在配置opencv支持ffmpeg是遇到一个问题。opencv是2.4.10 ffmpeg是2.6.1,后来又用了2.5.4
安装opencv编译能过,但是不能识别ffmpeg。能识别ffmpeg但是编译opencv报错,能识别ffmpeg但是报错的错误代码是:
/lib/libbz2.so.1: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[2]: *** [lib/libopencv_highgui.so.2.4.10] 错误 1
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] 错误 2
make: *** [all] 错误 2
在CMakeCacheList.txt里加上-lpthread -lrt 还是错误。
ffmpeg安装的最新版本,且用--prefix指定了安装位置,不是在默认位置上安装。
求指导。。。

zhangdanfeng

0个粉丝

1

问答

0

专栏

0

资料

zhangdanfeng 2017-12-18 14:27:42
认可0
这样直接编译出来的opencv执行效率会比较低,如何提速可参考我的帖子:lol

9crk

1个粉丝

34

问答

0

专栏

6

资料

9crk 2015-02-01 23:25:10
认可0
顶一个~:lol
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区