树莓派4编译OpenCV卡在53%报错的问题求助
解决树莓派4编译OpenCV卡在calib3d模块链接阶段的问题
针对你编译OpenCV到53%时出现的libopencv_calib3d.so链接错误,以下是几个可直接操作的解决方案:
临时扩容交换分区(解决内存不足)
树莓派4默认swap空间偏小,多线程编译时内存溢出会导致链接失败。执行以下步骤:- 关闭当前swap:
sudo dphys-swapfile swapoff - 编辑swap配置文件:
sudo nano /etc/dphys-swapfile,将CONF_SWAPSIZE的值改为2048(2GB) - 重新启用swap:
sudo dphys-swapfile swapon - 编译完成后记得改回原数值(比如100),长期大swap会加速SD卡损耗
- 关闭当前swap:
减少GPU内存分配
默认GPU内存占比过高会挤占编译可用内存:- 编辑启动配置:
sudo nano /boot/config.txt - 找到
gpu_mem项,修改为128(足够GPU基础使用,腾出更多内存给编译) - 重启树莓派:
sudo reboot
- 编辑启动配置:
禁用非必需的OpenCV模块
如果你的人脸识别应用不需要相机校准功能,可直接关闭calib3d模块,减少编译负载:- 删除原build目录:
rm -rf build && mkdir build && cd build - 重新执行cmake命令,添加禁用参数(仅保留人脸识别必需模块):
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D BUILD_opencv_calib3d=OFF \ -D BUILD_opencv_stitching=OFF \ -D BUILD_opencv_features2d=OFF \ -D BUILD_EXAMPLES=OFF .. - 重新执行
make或make -j2(用-j2比-j$(nproc)更稳,避免内存过载)
- 删除原build目录:
降低编译优化级别
高优化级别可能在树莓派ARM架构下出现兼容性问题,改为O2优化:
在cmake命令中添加:-D CMAKE_CXX_FLAGS="-O2" \ -D CMAKE_C_FLAGS="-O2" \重新安装完整依赖
可能存在依赖缺失导致链接失败,重新安装所有必需依赖:sudo apt-get update && sudo apt-get install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev
内容的提问来源于stack exchange,提问作者Jack Regan
相关产品推荐
相关产品推荐

