linux环境:ubuntu16.04
交叉编译工具 arm-cortexa9-linux-gnueabi
(一)下载opencv2.4.9源码
下载地址:opencv
(二)配置编译环境
安装cmake cmake-qt-gui
Compilers选项中的C选择*-gcc
C++选择*-g++,要找到交叉编译工具链所在位置。
find program include
编译工具的库函数(lib)的位置
点Advanced
接下来是终极配置!!不按照以下配置必然会报错!!
去掉BUILD_OPENEXR
去掉BUILD_opencv_ocl
去掉WITH_1394
去掉WITH_CUDA
去掉WITH_GSTREAMER(没见到)
去掉WITH_GTK(没见到)
去掉WITH_LIBV4L(后边有v4l这个没用不要选)(没见到)
去掉WITH_OPENCL
去掉WITH_OPENEXR
去掉WITH_TIFF
在cmake-gui中去掉BUILD_opencv_apps这一项的钩钩!!!
勾上BUILD_JASPER
勾上BUILD_JPEG
勾上BUILD_PNG
勾上BUILD_ZLIB
CMAKE_C_FLAGS 设置为-O3 -fPIC
CMAKE_CXX_FLAGS 设置为-O3 -fPIC
CMAKE_MODULE_LINKER_FLAGS:STRING=-pthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -lrt
//注意,有些系统是如下配置,反正我的ubuntu14.04只能是使用上面的配置
(CMAKE_MODULE_LINKER_FLAGS:STRING=-lpthread -lrt
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt
-lpthread都改为-pthread)
注意,有时候还是会 出现错误此时
修改编译目录下的 CMakeCache.txt 文件:
找到 CMAKE_EE_LINKER_FLAGS:STRING 项:
190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING=’ ’
修改成以下:
190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING= -pthread -lrt
(三).编译和安装
配置好后点generate
make
或者make -j8(八线程哦,快很多)
make install
(四).常见错误提示及解决方法
(1)错误1
Linking CXX shared library …/…/lib/libopencv_core.so
/opt/EmbedSky/4.4.6/lib/gcc/arm-embedsky-linux-gnueabi/4.4.6/…/…/…/…/arm-embedsky-linux-gnueabi/bin/ld: …/…/3rdparty/lib/libzlib.a(inflate.c.obj): relocation R_ARM_MOVW_ABS_NC against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
…/…/3rdparty/lib/libzlib.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [lib/libopencv_core.so] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 错误 2
解决方法1:
http://ask.csdn.net/questions/70191
最佳方法:
在cmake-gui 中配置
CMAKE_C_FLAGS 设置为-O3 -fPIC
CMAKE_CXX_FLAGS 设置为-O3 -fPIC
(2)错误2
…/…/lib/libopencv_core.so:对‘pthread_spin_init’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_unlock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_key_create’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_getspecific’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_lock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_destroy’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_once’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_trylock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_setspecific’未定义的引用
解决方法:
CMAKE_MODULE_LINKER_FLAGS:STRING=-pthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -lrt
//注意,有些系统是如下配置,反正我的ubuntu14.04只能是使用上面的配置
(CMAKE_MODULE_LINKER_FLAGS:STRING=-lpthread -lrt
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt
-lpthread都改为-pthread)
错误3
Linking CXX executable …/…/bin/opencv_createsamples
…/…/lib/libopencv_core.so:对‘pthread_spin_init’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_unlock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_key_create’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_getspecific’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_lock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_destroy’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_once’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_trylock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_setspecific’未定义的引用
collect2: error: ld returned 1 exit status
make[2]: *** [bin/opencv_createsamples] 错误 1
make[1]: *** [apps/haartraining/CMakeFiles/opencv_createsamples.dir/all] 错误 2
make: *** [all] 错误 2
尝试解决
google之
http://stackoverflow.com/questions/40246165/linking-issue-in-opencv-createsamples
使用以上解决方法
直接
make
然后
make clean
不行!!!!
提示假如不用可以不编译
Alternatively for you to continue you could disable building that if you are not using it.
终极解决方法!!
不编译这个apps模块!
在cmake-gui中去掉BUILD_opencv_apps这一项的钩钩!!!