海思3559环境采用cmake-gui交叉编译opencv及opencv_contrib
前言
海思3559环境采用cmake-gui交叉编译opencv及opencv_contrib过程以及出现的问题解决。
建议将问题解决部分的修改和配置完成后,再进行编译,避免浪费时间。一定要弄一个翻墙的VPN,不然编译时,configure会有很多文件无法下载,导致编译失败。
环境:
ubuntu:16.04
海思:海思3559
opencv:opencv-4.2.0,opencv_contrib-4.2.0
安装cmake-gui:
先装cmake:sudo apt-get install cmake
再装cmake-gui:sudo apt-get install cmake-qt-gui
二、使用cmake-gui编译
1.打开cmake-gui
打开ubuntu的terminal终端,输入cmake-gui,打开cmake的gui界面。
2.编译配置
路径填写
在source code 填入解压后的opencv4.2.0路径;
在build 填入编译输出路径,这里我的路径是单独建立的文件夹opencv-build。
填写完成后点击“configure”。
编译器选择
选择第四项,点击“next”,填写编译器路径。
Operation System — arm-himix200-linux
gcc —— /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
g++ —— /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
编译器路径需要根据自己ubuntu系统的编译器路径来填写。
3.修改配置
修改CMAKE_INSTALL_PREFIX
这个是最后库的安装路径,文件夹是我自己创建的。
添加OPENCV_EXTRA_MODULE_PATH
也就是contrib的modules路径
添加CMAKE_FIND_ROOT_PATH
/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/
勾选BUILD_opencv_world库
这样编译出来的库就一个XXXXworld.so,而不是一堆库。
源代码修改
在opencv-4.2.0中的
modules/videoio/src/cap_dshow.cpp中的include “cap_dshow.hpp”上一行添加
#define NO_DSHOW_STRSAFE
cmake参数修改
在opencv4.2.0目录下,修改最顶层的CMakeList.txt,在include(cmake/OpenCVMinDepVersions.cmake)后面添加:
SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-pthread -ldl")
SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread -ldl")
4.问题解决
zlib.h问题
fatal error: zlib.h: No such file or directory
对于该问题,博客上有的说可以直接在cmake-gui上面添加ZLIB_INCLUDE_DIR配置,这个我尝试过,是不行的,configure后,这个添加的配置会消失,不起作用,原因未知,因此配置项建议在CMakeLists.txt中添加,正确的解决方式应该是在CMakeLists.txt添加路径。
解决:
在opencv4.2.0目录下,修改最顶层的CMakeList.txt,找到ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR}),并在下面添加:ocv_include_directories(./3rdparty/zlib)
No suitable threading问题
common.cc:52:2: error: #error “No suitable threading library available.” #error “No suitable threading library available.
如果在顶层的CMakeLists.txt中添加了-pthread -ldl,应该不会出现此问题。(有些博客说的在cmake-gui添加额外CMAKE_CXX_FLAS,CMAKE_C_FLAS,因为configure后添加的配置会失效,原因未知,因此配置项建议在CMakeLists.txt中添加)
解决:
在opencv-4.2.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc 中添加下面这一行#define HAVE_PTHREAD
-fpermissive问题
error: invalid conversion from ‘uchar {aka unsigned char}’ to ‘const JOCTET {aka const char}’ [-fpermissive]
在opencv4.2.0目录下,修改最顶层的CMakeList.txt,SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} “-pthread -ldl”)添加”-fpermissive”
png的引用未定义错误
undefined reference to `png_init_filter_functions_neon’
有博客给的解决方案是将BUILD_PNG勾选去掉,这个也是不可行的。默认的配置本来就没有勾选BUILD_PNG,正确解决方式如下:
修改:
找到3rdparty/libpng/CMakeLists.txt在最上面加上
SET(ARM 1)
SET(ENABLE_NEON 1)
6.编译
以上参数修改完成后,再次点击configure。
中间要下载一些东西,所以要保证有网络,而且需要翻墙才能configure完成。(不翻墙会出现下载失败,尝试多次失败后,弄了个VPN,才configure成功)。
出现configuring done后,且中间的配置参数没有红色后,点击generate,出现generating done即可。
注意:configure时,cmake-gui顶部会有出现红色,如下所示,提示
System is unkown to cmake…
Detected processor:…
这个是可以忽略的。
进入编译输出文件夹opencv-build,打开terminal终端,输入make,然后等待完成。make完成后,终端输入make install,到此opencv的交叉编译就完成了。
make的时间特别长,建议看会书,或者玩会游戏。
- 分享
- 举报
-
2023-11-30 10:06:37
-
浏览量:5340次2019-12-28 10:33:46
-
浏览量:1149次2023-07-26 13:44:05
-
浏览量:851次2024-01-08 18:13:05
-
浏览量:2182次2024-02-05 15:51:53
-
浏览量:2352次2024-01-18 15:01:07
-
浏览量:1039次2024-01-03 17:15:03
-
浏览量:820次2023-10-09 19:30:42
-
浏览量:1321次2023-12-05 13:41:24
-
浏览量:1066次2023-06-03 16:06:12
-
浏览量:3232次2020-07-29 11:49:25
-
浏览量:314次2024-11-13 14:14:36
-
浏览量:9429次2021-12-07 10:21:27
-
浏览量:875次2024-02-04 10:08:58
-
浏览量:828次2024-01-24 16:33:36
-
浏览量:1092次2024-01-22 17:02:06
-
浏览量:5603次2022-06-01 09:36:28
-
浏览量:1314次2023-07-20 11:05:58
-
浏览量:593次2024-01-24 14:47:22
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
GGZY
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明