您的位置:首页 > 运维架构

交叉编译Opencv2.4.9完全实录

2017-05-05 19:34 357 查看

1.编译环境及库文件

linux环境:ubuntu14.04

交叉编译工具 gcc-arm-linux-gnueabi

安装

sudo apt-get install gcc-arm-linux-gnueabi

sudo apt-get install g++-arm-linux-gnueabi

2.使用cmake-gui配置

以下配置非常关键!!!!

点config



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)

3.编译和安装

配置好后点generate

make

或者make -j8(八线程哦,快很多)

make install

4.常见错误提示及解决方法

(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这一项的钩钩!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: