iTOP4412嵌入式开发板填坑笔记:交叉编译opencv的坑

iTOP4412嵌入式开发板填坑笔记:交叉编译opencv的坑

CMake版本要求为cmake-2.8.12.2

因为arm版本的cmake在使用sudo apt-get install cmake-gui的时候安装的版本比较低,所以在使用cmake编译opencv的时候会出现这个问题。

  • 解决办法:
    1. 先卸载原先的cmake:sudo apt-get remove cmake-gui
    2. 到网上下载高版本的cmake:http://www.cmake.org/cmake/resources/software.html
    3. 这里下载已经编译好的,这样只需要解压至需要的目录下即可使用:tar -zxvf cmake-2.8.10.2-Linux.tar.gz
    4. 再拷贝到/usr/local目录里面:sudo cp -r cmake-2.8.10.2/ /usr/local/
    5. 设置环境变量:sudo gedit ~/.bashrc
    6. 在打开的文件后添加:export PATH=$PATH:/usr/local/cmake-2.8.10.2/bin
    7. 查看版本,测试是否安装成功:cmake --version
    8. 定位到cmake目录下调用cmake-gui:cd /usr/local/cmake-2.8.10.2/bin;sudo ./cmake-gui

如何清除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.csdn.net/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.csdn.net/jd404647184/article/details/45745535
https://www.cnblogs.com/emouse/archive/2013/04/01/2993842.html

猜你喜欢

转载自blog.csdn.net/chenhuan20123/article/details/79154498