在全志V3S上移植Opencv-2.4.13.6编译遇到的问题总结

在全志V3S上编译OpenCV的详细过程这里不再赘述, 网上很多教程, 我参考的是下面这个博客:

https://blog.csdn.net/u014525760/article/details/78737379

写的很好, 可参考, 下面说说移植过程出现的一个问题是上面文章中未提到的, 可能是全志这款芯片的编译器问题, 在编译到

modules\imgproc\src\smooth.cpp这个代码时出现如下异常:

/home/xxxx/opencv-2.4.13.6/modules/imgproc/src/smooth.cpp: In function ‘void cv::medianBlur_8u_O1(const cv::Mat&, cv::Ma t&, int)’:
/home/kerson/v3s/SeetaFaceEngine/opencv-2.4.13.6/modules/imgproc/src/smooth.cpp:955:1: internal compiler error: in vect_transform_stmt, at tree-vect-stmts.c:5420
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.launchpad.net/gcc-linaro> for instructions.
modules/imgproc/CMakeFiles/opencv_imgproc.dir/build.make:446: recipe for target 'modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/smooth.cpp.o' failed
make[2]: *** [modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/smooth.cpp.o] Error 1
CMakeFiles/Makefile2:1489: recipe for target 'modules/imgproc/CMakeFiles/opencv_imgproc.dir/all' failed
make[1]: *** [modules/imgproc/CMakeFiles/opencv_imgproc.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

这个奇葩异常将我移植OpenCV给挡住了, 因为网上的解决办法就是升级编译器, 可是V3S的编译器就是那一个版本, 只能查看源码, 发现这个函数只在该 文件被调用了一次, 是关于图片模糊处理使用的, 想想对我的项目好像没啥用处, 就把这个函数的调用给屏蔽掉了, 然后编译竟然一路顺畅的通过了;

如果在选中PNG模块后有提示没有zlib库的时候在cmake-gui界面配置中将zlib库选中即可, 如下图所示:

同理, OpenCV自带了不少第三方库, 如果有类似报错先在配置中查找是否有这个选项而不需要去下载代码重新编译;

返回来继续看编译器BUG的问题, 屏蔽了medianBlur_8u_O1这个函数总归是让人觉着不舒服的, 所以今天我就继续挖吧, 最后定位到了smooth.cpp文件1096行左右, 代码截图如下:

问题就出在1096这行, 然后我就尝试使用各种方法去替换这个函数实现:

1093                     for (j = 0; j < 2 * r; ++j)
1094                     {
1095                         int index = 16 * (n*c + j);
1096 //                      histogram_add( &h_coarse[index], H[c].coarse );
1097                         for (k = 0; k < 15; ++k)
1098                         {
1099                             H[c].coarse[k] = (HT)(H[c].coarse[k] + h_coarse[index + k]);
1100                         }
1101                         HT value = (HT)(H[c].coarse[15] + h_coarse[index + 15]);
1102                         H[c].coarse[15] = value;
1103                     }

最后发现问题就出现在1102行这里, 给索引15赋值value不行, 但赋值value - 1就可以, 赋值value - 0也不可以, 目前就挖到这里, 继续想办法让编译器认识到问题的正确性才行....

最新进展: 编译器更换为buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-系列编译器即可解决问题, 无需修改代码~!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值