You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下wxWidgets+CMake+MSYS2编译报错:找不到libwx_mswu-3.2.a

Windows下wxWidgets+CMake+MSYS2编译报错解决

问题现象

CMake配置阶段能正常识别wxWidgets库,但执行Ninja构建时触发以下错误:

ninja: error: '/mingw64/lib/libwx_mswu-3.2.a', needed by 'bin/wxwidget-template.exe', missing and no known rule to make it

环境详情

  • 操作系统:Windows
  • MSYS2安装路径:D:/msys64
  • 编译器:MinGW-w64(g++和gcc)
  • wxWidgets版本:3.2.5(单体模式编译)
  • CMake版本:3.26.0
  • 生成器:Ninja

wxWidgets编译命令

../configure --enable-optimise --enable-stl --enable-unicode --disable-shared --enable-monolithic
make
make install

项目CMake配置命令(原命令)

cmake -DCMAKE_CXX_COMPILER=D:/msys64/mingw64/bin/g++.exe -DCMAKE_PREFIX_PATH=D:/msys64/mingw64 -DwxWidgets_ROOT_DIR=D:/msys64/mingw64 -DwxWidgets_LIB_DIR=D:/msys64/mingw64/lib -DwxWidgets_CONFIGURATION=msw-unicode-static-3.2 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -G "Ninja" ../../..

CMake配置输出

-- wxWidgets found: 3.2.5
-- wxWidgets include dirs: /mingw64/lib/wx/include/msw-unicode-static-3.2;/mingw64/include/wx-3.2
-- wxWidgets libraries: -L/mingw64/lib;;;-Wl,--subsystem,windows;-mwindows;/mingw64/lib/libwx_mswu-3.2.a;-limm32;-lwxtiff-3.2;-lwxjpeg-3.2;-lwxpng-3.2;-lwxregexu-3.2;-lwxscintilla-3.2;-lwxexpat-3.2;-lz;-lz;-lrpcrt4;-loleaut32;-lole32;-luuid;-luxtheme;-lwinspool;-lwinmm;-lshell32;-lshlwapi;-lcomctl32;-lcomdlg32;-ladvapi32;-lversion;-lws2_32;-lgdi32;-loleacc;-lwinhttp
-- Configuring done (9.7s)
-- Generating done (0.1s)

项目根目录CMakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(wxwidget-template LANGUAGES CXX)

if (DEFINED DEVEL AND NOT DEVEL EQUAL 0)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

set(wxWidgets_ROOT_DIR "D:/msys64/mingw64")
set(wxWidgets_LIB_DIR "D:/msys64/mingw64/lib")
set(wxWidgets_LIBRARIES "D:/msys64/mingw64/lib/libwx_mswu-3.2.a")
set(wxWidgets_INCLUDE_DIRS "D:/msys64/mingw64/include/wx-3.2;D:/msys64/mingw64/include;D:/msys64/mingw64/lib/wx/include/msw-unicode-static-3.2")
set(wxWidgets_CONFIGURATION "msw-unicode-static-3.2")

link_directories(D:/msys64/mingw64/lib)

find_package(wxWidgets REQUIRED COMPONENTS monolithic)

if (wxWidgets_FOUND)
  message(STATUS "wxWidgets found: ${wxWidgets_VERSION_STRING}")
  message(STATUS "wxWidgets include dirs: ${wxWidgets_INCLUDE_DIRS}")
  message(STATUS "wxWidgets libraries: ${wxWidgets_LIBRARIES}")
  include(${wxWidgets_USE_FILE})
else()
  message(FATAL_ERROR "wxWidgets not found!")
endif()

add_subdirectory("src")

src目录CMakeLists.txt

include_directories(.)
include("${wxWidgets_USE_FILE}")

file(GLOB sources *.cpp)

add_executable(${PROJECT_NAME} WIN32 ${sources})

target_include_directories(${PROJECT_NAME} PRIVATE ${wxWidgets_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})

install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)

解决方案

1. 统一路径格式为MSYS2风格

在MSYS2的MinGW64终端中执行CMake,使用Unix风格路径(/d/msys64/mingw64替代D:/msys64/mingw64),修改后的CMake命令:

cmake -DCMAKE_CXX_COMPILER=/d/msys64/mingw64/bin/g++.exe -DCMAKE_PREFIX_PATH=/d/msys64/mingw64 -DwxWidgets_ROOT_DIR=/d/msys64/mingw64 -DwxWidgets_LIB_DIR=/d/msys64/mingw64/lib -DwxWidgets_CONFIGURATION=msw-unicode-static-3.2 -DCMAKE_VERBOSE_MAKEFILE=ON -G "Ninja" ../../..

2. 修正CMakeLists.txt变量设置

根目录CMakeLists.txt中,删除手动设置的路径变量(find_package会自动正确填充):

  • 删除set(wxWidgets_LIBRARIES "D:/msys64/mingw64/lib/libwx_mswu-3.2.a")
  • 删除set(wxWidgets_INCLUDE_DIRS "D:/msys64/mingw64/include/wx-3.2;D:/msys64/mingw64/include;D:/msys64/mingw64/lib/wx/include/msw-unicode-static-3.2")
  • 删除link_directories(D:/msys64/mingw64/lib)

修改后的根目录CMakeLists.txt相关部分:

set(wxWidgets_ROOT_DIR "/d/msys64/mingw64")
set(wxWidgets_LIB_DIR "/d/msys64/mingw64/lib")
set(wxWidgets_CONFIGURATION "msw-unicode-static-3.2")

find_package(wxWidgets REQUIRED COMPONENTS monolithic)

3. 重新执行构建流程

  1. 打开MSYS2的MinGW64终端(确保不是MSYS终端)
  2. 清空旧构建目录:rm -rf build/*
  3. 进入构建目录,执行修改后的CMake配置命令
  4. 执行ninja开始构建

4. 验证库文件路径

在MSYS2终端中执行以下命令确认库文件存在:

ls /d/msys64/mingw64/lib/libwx_mswu-3.2.a

内容的提问来源于stack exchange,提问作者ClynnJDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:00:55