diff --git a/.gitignore b/.gitignore index 434fa81..e875cc3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ build/ build-windows/ +build-wsl-windows/ cmake-build-*/ .qt/ .qtc/ diff --git a/QtOpenCVImageTool.zip b/QtOpenCVImageTool.zip index d163681..66ddde7 100644 Binary files a/QtOpenCVImageTool.zip and b/QtOpenCVImageTool.zip differ diff --git a/build_wsl_windows.sh b/build_wsl_windows.sh new file mode 100755 index 0000000..eeca5db --- /dev/null +++ b/build_wsl_windows.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -euo pipefail + +if ! command -v x86_64-w64-mingw32-g++ >/dev/null 2>&1; then + echo "Missing x86_64-w64-mingw32-g++." + echo "Install it in WSL with: sudo apt install mingw-w64" + exit 1 +fi + +if [[ "${QT_MINGW_PREFIX:-}" == "" ]]; then + echo "Missing QT_MINGW_PREFIX." + echo "Example: export QT_MINGW_PREFIX=/opt/mxe/usr/x86_64-w64-mingw32.shared/qt6" + exit 1 +fi + +if [[ "${OpenCV_DIR:-}" == "" ]]; then + echo "Missing OpenCV_DIR." + echo "Example: export OpenCV_DIR=/opt/mxe/usr/x86_64-w64-mingw32.shared/lib/cmake/opencv4" + exit 1 +fi + +cmake -S . -B build-wsl-windows \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/mingw64.cmake \ + -DCMAKE_PREFIX_PATH="${QT_MINGW_PREFIX}" \ + -DOpenCV_DIR="${OpenCV_DIR}" + +cmake --build build-wsl-windows --config Release + +echo "Windows executable should be under build-wsl-windows/." diff --git a/cmake/toolchains/mingw64.cmake b/cmake/toolchains/mingw64.cmake new file mode 100644 index 0000000..0dcfb71 --- /dev/null +++ b/cmake/toolchains/mingw64.cmake @@ -0,0 +1,11 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) +set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/readme.md b/readme.md index a7fca5b..40e3319 100644 --- a/readme.md +++ b/readme.md @@ -87,6 +87,26 @@ windeployqt QtOpenCVImageTool.exe 然后把 OpenCV 的运行库 DLL 一并复制到 exe 所在目录,例如 `opencv_world*.dll` 或相关 `opencv_*.dll`。 +## WSL 中交叉编译 Windows 程序 + +WSL 里不能使用 Linux 版 Qt/OpenCV 直接生成 Windows exe,必须准备 Windows 目标库。推荐使用 MinGW-w64 作为交叉编译器,并准备同为 MinGW-w64 目标的 Qt 和 OpenCV。 + +需要的组件: + +- `x86_64-w64-mingw32-g++` +- Windows/MinGW 目标 Qt,目录中应包含 `Qt6Config.cmake` 或 `Qt5Config.cmake` +- Windows/MinGW 目标 OpenCV,目录中应包含 `OpenCVConfig.cmake` + +构建脚本: + +```bash +export QT_MINGW_PREFIX=/opt/mxe/usr/x86_64-w64-mingw32.shared/qt6 +export OpenCV_DIR=/opt/mxe/usr/x86_64-w64-mingw32.shared/lib/cmake/opencv4 +./build_wsl_windows.sh +``` + +如果使用的是自己编译或复制来的 Windows 目标 Qt/OpenCV,把上面两个路径换成实际路径即可。 + ## 说明 本示例中的分类属于简单规则分类,适合作为课程作业演示:根据图像整体亮度判断“偏亮/偏暗/亮度适中”,根据 BGR 平均值判断主色。若需要更高精度分类,可替换为训练好的 OpenCV DNN 或传统机器学习模型。