交叉编译Opencv2.4.9完全实录

xiaoxiao2021-02-28  82

#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) 注意,有时候还是会 出现错误此时 修改编译目录下的 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

#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这一项的钩钩!!!

沧海飞帆 认证博客专家 火星工程师 热爱多传感器融合slam、机器人、人工智能相关技术。立志于让机器人更智能,为人类移民火星做铺垫。让科技使生活更幸福,让科技改变世界。
转载请注明原文地址: https://www.6miu.com/read-39595.html

最新回复(0)