树莓派3B的Rasbian Stretch编译OpenCV3.3.0至58%失败求助
解决树莓派3B编译OpenCV 3.3.0到58%时的链接错误
我之前在树莓派上折腾OpenCV编译时也碰到过几乎一模一样的问题,这个错误的核心是gr_chalearn.cpp.o这个目标文件被截断了,导致链接器collect2报错。大概率是编译过程中资源不足、意外中断或者存储介质出了小问题,给你几个亲测有效的解决思路:
先清理损坏文件,降低编译并行度重新编译
首先进入你的OpenCV编译目录,执行清理命令把损坏的目标文件删掉:cd /path/to/your/opencv/build make clean树莓派3B的CPU是4核,但内存只有1GB,用
make -j4很容易因为内存耗尽导致文件写入异常。建议改成低并行度甚至单线程编译:make -j2 # 或者直接执行 make,单线程更稳定临时增大交换空间,缓解内存压力
编译OpenCV对内存需求很高,树莓派默认的交换空间太小,很容易爆内存。可以临时调整交换空间:- 编辑交换空间配置文件:
sudo nano /etc/dphys-swapfile - 找到
CONF_SWAPSIZE=100,改成CONF_SWAPSIZE=1024(如果SD卡剩余空间够,改成2048更好) - 重启交换服务生效:
sudo /etc/init.d/dphys-swapfile restart
注意:编译完成后记得改回原来的交换空间大小,长期用大交换空间会加速SD卡磨损。
- 编辑交换空间配置文件:
检查SD卡的健康状态
文件截断也可能是SD卡出现了坏块或者写入错误。可以通过以下命令排查:dmesg | grep mmc看看输出里有没有类似
mmcblk0: error的日志。如果有条件,最好把SD卡插到其他设备上用磁盘检测工具检查,或者备份数据后重新格式化SD卡再尝试编译。确认OpenCV源代码的完整性
有时候下载的源码包可能有损坏,导致编译生成的目标文件异常。如果前面的方法都没用,可以重新拉取完整的OpenCV 3.3.0源码(记得带上子模块):git clone --branch 3.3.0 --recursive https://github.com/opencv/opencv.git然后重新运行CMake配置,再开始编译。
内容的提问来源于stack exchange,提问作者Allen Jakpa
相关产品推荐
相关产品推荐

