ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

麒麟系统 Qt + OpenCV + GDAL 源码编译安装

麒麟系统 Qt + OpenCV + GDAL 源码编译安装 一、背景与适用场景银河麒麟操作系统底层基于 Linux类 Ubuntu/Debian其软件源策略较为保守官方仓库提供的 OpenCV、GDAL 等地理空间与计算机视觉库版本通常较旧难以满足现代开发对新特性如 OpenCV 4.x 的 DNN 模块、GDAL 3.x 的 MVT 支持的需求。因此从源码编译安装成为获取特定版本和完整功能的可靠路径。本文以麒麟 V10x86_64 架构、GCC 9.3.0、CMake 3.16.3为例完整记录 Qt、OpenCV、GDAL 三大组件的源码编译流程并重点解析编译过程中高频出现的错误及其解决方案。架构确认编译前执行arch确认系统架构x86_64或aarch64下载源码和依赖包时务必选择对应版本。二、环境准备与依赖安装在开始编译前先安装基础开发工具和通用依赖bashsudo apt update sudo apt install -y build-essential cmake pkg-config \ libjpeg-dev libpng-dev libtiff-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ libgtk-3-dev libcanberra-gtk3-module \ libtbb2 libtbb-dev \ python3-dev python3-numpy麒麟特别提醒默认 GCC 版本可能偏旧。若编译时报 C11/14 标准相关错误可安装gcc-7 g-7并用update-alternatives切换。三、Qt 安装3.1 方式一系统包管理器安装最简适用于仅需基础 Qt5 开发库和 IDE 的场景bashsudo apt install qtcreator qt5-default qtbase5-dev安装后通过qmake --version验证。3.2 方式二官方安装包推荐用于特定版本若需 Qt 5.12.8、6.9.3 等特定 LTS 版本或完整开发组件从官网下载.run安装包bashchmod x qt-opensource-linux-x64-*.run sudo ./qt-opensource-linux-x64-*.run关键步骤登录可跳过SkipQt 账户登录。安装路径建议改为/opt/QtX.X.X便于多用户管理。组件选择务必勾选与系统架构匹配的Desktop gcc 64-bit和Qt Creator。国内源加速启动安装器时添加参数--mirror http://mirrors.nju.edu.cn/qt/。四、OpenCV 编译安装4.1 下载源码推荐使用wget下载源码快照避免git clone在国内网络下的超时和子模块拉取失败问题bashcd ~/桌面 wget -O opencv-4.12.0.tar.gz \ https://github.com/opencv/opencv/archive/4.12.0.tar.gz # 可选下载 contrib 扩展模块版本号必须一致 wget -O opencv_contrib-4.12.0.tar.gz \ https://github.com/opencv/opencv_contrib/archive/4.12.0.tar.gz关键提醒GitHub 下载务必选择Source code (tar.gz)而非 Windows/Android 预编译包。4.2 解压与构建目录准备bashtar -xzf opencv-4.12.0.tar.gz tar -xzf opencv_contrib-4.12.0.tar.gz # 如需要 contrib cd opencv-4.12.0 mkdir -p build cd build4.3 CMake 配置不含 contrib 的基础配置bashcmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D WITH_GTKON \ -D WITH_V4LON \ -D WITH_FFMPEGON \ -D BUILD_TESTSOFF \ -D BUILD_EXAMPLESOFF \ -D OPENCV_GENERATE_PKGCONFIGON \ ..含 contrib 的配置在末尾追加bash-D OPENCV_EXTRA_MODULES_PATH~/桌面/opencv_contrib-4.12.0/modules \ ..配置成功的标志text-- Configuring done -- Generating done -- Build files have been written to: /home/llh/桌面/opencv-4.12.0/build4.4 常见配置错误及解决方案错误 1缺少..导致找不到 CMakeLists.txttextCMake Error: The source directory .../build does not appear to contain CMakeLists.txt.原因CMake 命令末尾缺少..导致其误以为源码目录就是build文件夹。解决在命令末尾补上..。错误 2contrib 模块路径不存在textCMake Error at cmake/OpenCVModule.cmake:274 (message): No modules has been found: .../opencv_contrib-4.12.0/modules原因-D OPENCV_EXTRA_MODULES_PATH指向的目录不存在contrib 未成功下载或 build 目录残留了上一次的CMakeCache.txt即使命令行未带该参数也会从缓存读取。解决确认目录存在ls ~/桌面/opencv_contrib-4.12.0/modules若不需要 contrib彻底清空缓存后重配bashcd ~/桌面/opencv-4.12.0 rm -rf build mkdir build cd build # 执行不带 contrib 的 cmake 命令验证缓存grep -i contrib build/CMakeCache.txt错误 3ADE 下载失败导致配置中断textCMake Warning at cmake/OpenCVDownload.cmake:251 (message): ADE: Download failed: 35;SSL connect error原因gapi模块依赖 ADE 库从 GitHub 下载时因 SSL/网络问题失败。解决禁用 gapi 模块绕开 ADE 下载bashcmake ... -D BUILD_opencv_gapiOFF ..错误 4IPPICV 下载失败可忽略textIPPICV: Download failed: 35;SSL connect error说明Intel 性能库下载失败 OpenCV 会自动跳过仅性能略低不影响编译。4.5 编译与安装bash# 虚拟机建议先用 -j2避免内存不足被 OOM kill make -j2 sudo make install sudo ldconfig编译验证bashpkg-config --modversion opencv4 # 应输出 4.12.0安装后头文件位于/usr/local/include/opencv4库文件位于/usr/local/lib。4.6 Qt 项目集成在 Qt 项目的.pro文件中添加proINCLUDEPATH /usr/local/include/opencv4 LIBS -L/usr/local/lib \ -lopencv_core \ -lopencv_imgproc \ -lopencv_imgcodecs \ -lopencv_highgui测试代码main.cppcpp#include mainwindow.h #include QApplication #include opencv2/opencv.hpp #include QDebug int main(int argc, char *argv[]) { QApplication a(argc, argv); qDebug() OpenCV version: CV_VERSION; cv::Mat img cv::imread(test.jpg); if (img.empty()) { qDebug() 图片读取失败; } else { qDebug() 图片读取成功尺寸 img.cols x img.rows; } MainWindow w; w.show(); return a.exec(); }若报undefined reference to cv::imread检查.pro中是否正确链接了opencv_imgcodecs。五、GDAL 编译安装GDAL 的编译依赖关系特殊需按SQLite → PROJ → GDAL的顺序编译安装。5.1 编译 SQLite开启关键特性GDAL 处理 GeoPackage、Spatialite 等格式时需要 SQLite 启用COLUMN_METADATA支持系统自带版本通常未开启。下载源码autoconf 版本bashcd /data/inst wget https://www.sqlite.org/2023/sqlite-autoconf-3440000.tar.gz tar -zxvf sqlite-autoconf-3440000.tar.gz cd sqlite-autoconf-3440000配置编译bash./configure --prefix/usr/local/sqlite3 \ CFLAGS-g -O2 -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_RTREE make -j$(nproc) sudo make install权限修复若普通用户报权限不够bashsudo chmod x /usr/local/sqlite3/bin/sqlite3配置环境变量bashecho export PATH/usr/local/sqlite3/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/sqlite3/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc5.2 编译 PROJ坐标转换基石PROJ 是 GDAL 处理坐标系统的核心依赖版本必须 6.3。下载源码bashcd /data/inst wget https://download.osgeo.org/proj/proj-6.3.1.tar.gz tar -zxvf proj-6.3.1.tar.gz cd proj-6.3.1方案 ACMake 构建推荐PROJ 官方从版本 7 起推荐 CMake对非标准路径依赖处理更可靠bashmkdir build cd build cmake .. \ -DCMAKE_INSTALL_PREFIX/usr/local/proj6 \ -DCMAKE_BUILD_TYPERelease \ -DSQLITE3_INCLUDE_DIR/usr/local/sqlite3/include \ -DSQLITE3_LIBRARY/usr/local/sqlite3/lib/libsqlite3.so make -j$(nproc) sudo make install方案 BAutotools 构建bashexport PATH/usr/local/sqlite3/bin:$PATH export LD_LIBRARY_PATH/usr/local/sqlite3/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH/usr/local/sqlite3/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --prefix/usr/local/proj6 --enable-threads make -j1 sudo make install常见错误cannot find iso19111/: file format not recognized原因autotools 生成的 Makefile 在非标准 SQLite 路径下变量展开错误链接器试图将目录iso19111/当作文件链接。解决确认 SQLite 版本 3.11 且已被正确识别bashgrep -i sqlite /tmp/proj_conf.log # 应输出 checking for sqlite3... yes若 autotools 反复失败改用 CMake 构建方案 A显式指定SQLITE3_INCLUDE_DIR和SQLITE3_LIBRARY可从根本上避开此问题。验证安装bashls /usr/local/proj6/lib/libproj* # 应看到 libproj.so、libproj.so.15 等文件配置环境变量bashecho export PROJ_ROOT/usr/local/proj6 ~/.bashrc echo export PATH$PROJ_ROOT/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH$PROJ_ROOT/lib:$LD_LIBRARY_PATH ~/.bashrc echo export PROJ_DATA$PROJ_ROOT/share/proj ~/.bashrc source ~/.bashrc5.3 编译 GDAL下载源码bashcd /data/inst wget https://github.com/OSGeo/gdal/releases/download/v3.6.4/gdal-3.6.4.tar.gz tar -zxvf gdal-3.6.4.tar.gz cd gdal-3.6.4配置关键步骤bash./configure --prefix/usr/local/gdal \ --with-proj/usr/local/proj6 \ --with-sqlite3/usr/local/sqlite3 \ --without-java参数解析--prefix/usr/local/gdal独立安装目录避免污染系统。--with-proj/usr/local/proj6核心参数强制指向自定义 PROJ解决 PROJ 6 symbols not found。--with-sqlite3/usr/local/sqlite3显式指定 SQLite 路径。--without-java跳过 Java 绑定检查避免不必要的报错。检查配置输出留意checking for PROJ和checking for sqlite3的结果应为yes。编译安装bashmake -j2 sudo make install配置环境变量bashecho export PATH/usr/local/gdal/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/gdal/lib:$LD_LIBRARY_PATH ~/.bashrc echo export GDAL_DATA/usr/local/gdal/share/gdal ~/.bashrc source ~/.bashrc sudo ldconfig验证bashgdalinfo --version # 应输出 GDAL 3.6.4, released ...六、避坑总结问题根本原因解决方案OpenCV 配置报 No modules has been foundbuild 目录残留 CMakeCache.txt或 contrib 未下载清空 build 目录重配或去掉 contrib 参数OpenCV 配置报 ADE 下载失败gapi 模块依赖 ADE网络受限加-D BUILD_opencv_gapiOFFPROJ 编译报iso19111/链接错误autotools 对非标准 SQLite 路径处理错误改用 CMake 构建显式指定 SQLITE3 路径SQLite 报权限不够安装时属主为 root缺执行位sudo chmod x修复GDAL 找不到 PROJ未显式指定路径找到系统旧版本--with-proj/usr/local/proj6编译中途被 Killed虚拟机内存不足降为make -j1或-j2运行时找不到库未刷新动态链接库缓存sudo ldconfig并配置LD_LIBRARY_PATH核心原则环境隔离将自定义编译的库安装在/usr/local/下的独立目录避免污染系统自带软件便于后续升级或卸载。显式路径编译 GDAL 等上层库时务必通过参数显式指定下层依赖的路径防止链接到系统旧版本。环境变量编译完成后正确配置PATH、LD_LIBRARY_PATH、PKG_CONFIG_PATH及/etc/ld.so.conf.d/确保系统能找到新库。构建工具选择遇到 autotools 兼容性问题时优先考虑改用 CMake 构建其依赖路径处理更可靠。
返回列表