RK3588 源码编译 opencv
从你的输出信息来看,系统已经安装了 libpng 1.6.37(最新版本),但 OpenCV 4.8.1 在编译时仍然找不到 png_set_longjmp_fn
和 png_get_eXIf_1
等符号。这表明 CMake 可能没有正确链接到系统的 libpng 库,或者 OpenCV 的编译配置存在问题。
解决方案
1. 检查 libpng 是否包含所需符号
运行以下命令,确认 libpng.so
是否包含 OpenCV 需要的符号:
nm -D /usr/lib/aarch64-linux-gnu/libpng.so | grep png_set_longjmp_fn
nm -D /usr/lib/aarch64-linux-gnu/libpng.so | grep png_get_eXIf_1
- 如果有输出(如
T png_set_longjmp_fn
),说明库没问题,问题出在链接阶段。 - 如果没有输出,说明你的
libpng
版本可能不完整(尽管dpkg
显示已安装最新版)。
2. 确保 CMake 正确找到 libpng
OpenCV 可能链接到了错误的 libpng
版本,或者 PNG_INCLUDE_DIR
设置不正确。手动指定路径:
cd ~/opencv-4.8.1/build
rm -rf CMakeCache.txt CMakeFiles # 清理旧配置
cmake \-DWITH_PNG=ON \-DPNG_LIBRARY=/usr/lib/aarch64-linux-gnu/libpng.so \-DPNG_PNG_INCLUDE_DIR=/usr/include/libpng16 \..
PNG_LIBRARY
:确保指向正确的.so
文件(通常是/usr/lib/aarch64-linux-gnu/libpng.so
)。PNG_PNG_INCLUDE_DIR
:确保包含png.h
(通常是/usr/include/libpng16
)。