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. 重新执行构建流程
- 打开MSYS2的MinGW64终端(确保不是MSYS终端)
- 清空旧构建目录:
rm -rf build/* - 进入构建目录,执行修改后的CMake配置命令
- 执行
ninja开始构建
4. 验证库文件路径
在MSYS2终端中执行以下命令确认库文件存在:
ls /d/msys64/mingw64/lib/libwx_mswu-3.2.a
内容的提问来源于stack exchange,提问作者ClynnJDev
相关产品推荐
相关产品推荐

