opencv3.4.9 + armv7 + arm-linux-gnueabihf交叉编译
编译器等基本设置不再赘述,记录在编译时遇到的一些问题及解决办法:
1.
pthread dl库链接不上,找不到pthread dl相关的函数定义:解决办法为首先修改build目录下的CMakeCache.txt,
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -ldl
CMAKE_MODULE_LINKER_FLAGS:STRING=-pthread -ldl
再编译,此时有可能仍然报找不到dl***之类的错误,此时需要查看具体是哪一个模块,进入到其编译目录,修改link.txt(我的是/opencv-3.4.9/build-aarch/modules/core/CMakeFiles/opencv_core.dir/link.txt,报错的本质原因就是该文档中没有链接相关的库),在文本最后追加-pthread -ldl(一定要加到最后面,dl库不知道为什么一定要在最后).然后重新编译.
2.
/grfmt_jpeg.cpp:224:58: error: invalid conversion from ‘uchar* {aka unsigned char*}’ to ‘const JOCTET* {aka const char*}’ [-fpermissive]错误;
解决办法:修改build目录下的CMakeCache.txt,
CMAKE_CXX_FLAGS:STRING=-fpermissive
3.
../../lib/libopencv_imgcodecs.so:对‘png_init_filter_functions_neon’未定义的引用
../../lib/libopencv_imgcodecs.so:对‘png_riffle_palette_rgba’未定义的引用
../../lib/libopencv_imgcodecs.so:对‘png_do_expand_palette_neon_rgb’未定义的引用
../../lib/libopencv_imgcodecs.so:对‘png_do_expand_palette_neon_rgba’未定义的引用
collect2: 错误: ld 返回 1
修改opencv下的 /3rdparty/libpng/pngpriv.h 130行
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
改为
# if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
4.在安装完成之前,保证上面的修改是有效的(make过程中有可能修改上述文件).
以上是我碰见的所有问题.