NCNN移植ARM爬坑日志-opencv交叉编译 二
因为本人的arm板上面原先装有opencv3,但是NCNN暂时只支持opencv2,故就自己在Ubuntu系统下交叉编译opencv2.4.9
详细步骤如下:
在terminal中输入
1、$sudo cmake-gui
进入cmake-gui页面
>1如图所示,
where is the source code:是添加需要交叉编译的opencv主目录
where to build the binaries:需要我们在opencv主目录下建立的文件
选好这两个位置点configure,
>2选择之后会出现如下图所示,
如图选择specifyoptions for cross-compiling,点next:
>3会出现如图所示:
operating system:选择目标系统arm-linux
compilers:选择交叉编译的gcc和g++目录
Target Root:选择交叉编译的路径
点击finish按钮,开始生成配置文件,这时会有报错
错误1:
CMake Error atcmake/FindCUDA.cmake:763 (if):
if given arguments:
"CUDA_VERSION""VERSION_GREATER" "5.0" "AND""CMAKE_CROSSCOMPILING" "AND" "MATCHES""arm"
Unknown arguments specified
Call Stack(most recent call first):
cmake/OpenCVDetectCUDA.cmake:26(find_package)
cmake/OpenCVFindLibsPerf.cmake:24(include)
CMakeLists.txt:468 (include)
Configuring incomplete, errorsoccurred!
See also"/home/wolf/Downloads/opencv-2.4.9/build/CMakeFiles/CMakeOutput.log".
See also"/home/wolf/Downloads/opencv-2.4.9/build/CMakeFiles/CMakeError.log".
解决方法:在search中搜索WITH_CUDA,取消勾选重新点击configure按钮
最后点击generate按钮,完成编译过程
然后进入build目录,在terminal中输入
2、$sudo make
出现错误2:
../../lib/libopencv_core.so: undefined reference to`pthread_spin_init'
../../lib/libopencv_core.so: undefined reference to`pthread_spin_unlock'
../../lib/libopencv_core.so: undefined reference to`pthread_spin_lock'
../../lib/libopencv_core.so: undefined reference to`pthread_spin_destroy'
../../lib/libopencv_core.so: undefined reference to`pthread_once'
../../lib/libopencv_core.so: undefined reference to`pthread_spin_trylock'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/opencv_perf_core] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_perf_core.dir/all]Error 2
make: *** [all] Error 2
解决方法:原因是cmake不认识定义的arm-linux系统标记,没有加上库pthread和rt的链接选项
此时需要修改build里面的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,修改方法如图所示:
出现错误3:../../3rdparty/lib/libzlib.a(gzlib.c.obj):relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not beused when making a shared object; recompile with -fPIC类似的很多
解决方法:在如图所示目录下,把每个包含flags.make文件中的C_FLAGS行中加-fPIC
出现错误4:
../../lib/libopencv_ocl.so: undefined reference to `dlopen'
../../lib/libopencv_ocl.so: undefined reference to `dlsym'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/opencv_perf_ocl] Error 1
make[1]: *** [modules/ocl/CMakeFiles/opencv_perf_ocl.dir/all]Error 2
make: *** [all] Error 2
解决方法:出现这个错误的原因是没有找到dl库,修改需要继续修改build里面的CMakeCache.txt,在CMAKE_EXE_LINKER_FLAGS= -lpthread -lrt -ldl即可
最后运行在build目录下运行
3 $sudo make install