iTOP4412嵌入式开发板填坑笔记:交叉编译opencv的坑
CMake版本要求为cmake-2.8.12.2
因为arm版本的cmake在使用sudo apt-get install cmake-gui
的时候安装的版本比较低,所以在使用cmake编译opencv的时候会出现这个问题。
- 解决办法:
- 先卸载原先的cmake:
sudo apt-get remove cmake-gui
- 到网上下载高版本的cmake:http://www.cmake.org/cmake/resources/software.html
- 这里下载已经编译好的,这样只需要解压至需要的目录下即可使用:
tar -zxvf cmake-2.8.10.2-Linux.tar.gz
- 再拷贝到
/usr/local
目录里面:sudo cp -r cmake-2.8.10.2/ /usr/local/
- 设置环境变量:
sudo gedit ~/.bashrc
- 在打开的文件后添加:
export PATH=$PATH:/usr/local/cmake-2.8.10.2/bin
- 查看版本,测试是否安装成功:
cmake --version
- 定位到cmake目录下调用cmake-gui:
cd /usr/local/cmake-2.8.10.2/bin
;sudo ./cmake-gui
- 先卸载原先的cmake:
如何清除cmake-gui里面的设置
但编译不成功时,需要更换opencv版本的时候,总会出现之前设置的设置并不正确,这个时候需要重新设置cmake-gui,但是点击configure
的时候直接就编译而不是需要再次设置。
- 解决办法:进入到放置编译文件的那个文件夹把里面的东西都删除。
- 放置编译文件的文件夹路径就是cmake-gui第二行的文件路径。
- 命令,先进入该文件夹,然后
sudo rm -rf ./*
make时出现出现make[error]error: call of overloaded ‘abs(long long int&)’ is ambiguous
关于drawing.cpp:1031行中的abs()函数报错,与那stdlib.h和math.h和cmath和cstdlib剪不断理还乱的关系,原因:歧义
- 解决方法:修改abs()为fabs()
- 进入报错的路径,然后修改报错的cpp文件
drawing.cpp
topeet@ubuntu:~/Desktop/opencv-2.4.13.5/modules/core/src$ gedit drawing.cpp
参考:http://blog.youkuaiyun.com/qq962662562/article/details/77898543
里面的更正!!!开发板又不是64位,犯了低级错误,!!!!!!不用改,直接重新换2.x版本的
有误,我使用的版本也是2.X的,但还是出现了这个问题,只能用上面的解决办法。
maek时出现collect2: ld returned 1 exit statusmake[2]: * [bin/opencv_perf_core] 错误 1
完整的报错是:
../../lib/libopencv_core.so: undefinedreference to `pthread_spin_init'
../../lib/libopencv_core.so: undefinedreference to `pthread_spin_unlock'
../../lib/libopencv_core.so: undefinedreference to `pthread_spin_lock'
../../lib/libopencv_core.so: undefinedreference to `pthread_spin_destroy'
../../lib/libopencv_core.so: undefinedreference to `pthread_once'
../../lib/libopencv_core.so: undefinedreference to `clock_gettime'
../../lib/libopencv_core.so: undefinedreference to `pthread_spin_trylock'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_perf_core] 错误 1
make[1]: ***[modules/core/CMakeFiles/opencv_perf_core.dir/all] 错误 2
make: *** [all] 错误 2
原因是cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项
- 解决办法:此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上
-lpthread -lrt
若是出现:
../../lib/libopencv_ocl.so: undefinedreference to `dlopen'
../../lib/libopencv_ocl.so: undefinedreference to `dlsym'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_perf_ocl] 错误 1
make[1]: ***[modules/ocl/CMakeFiles/opencv_perf_ocl.dir/all] 错误 2
- 解决方法: 和上面一样,添加链接器选项
-ldl
- 变成
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -ldl -lrt
编译opencv源文件时出现:Package opencv was not found in the pkg-config search path.
首先看一下有没有安装pkg-config:pkg-config --version
。
再看一下你的放置编译文件的文件夹里面有没有lib/pkgconfig
这个路径。
参考链接:
http://blog.youkuaiyun.com/jd404647184/article/details/45745535
https://www.cnblogs.com/emouse/archive/2013/04/01/2993842.html