使用CMake构建时链接器找不到Vulkan与GLFW的技术求助
解决CLion中MinGW编译Vulkan+GLFW+GLM的链接错误
错误根源
链接器找不到vulkan-1和glfw3库,核心原因是你使用MinGW编译器,但配置的是MSVC版本的库文件——两者二进制格式不兼容,MinGW无法识别MSVC的.lib文件。
解决步骤
1. 替换GLFW为MinGW兼容版本
- 下载GLFW的MinGW预编译包(官网下载的压缩包中包含
lib-mingw-w64目录),将CMake中GLFW的库路径从lib-vc2022替换为lib-mingw-w64。 - MinGW下GLFW的库命名规则:静态库为
libglfw3.a,动态库为glfw3dll.lib,链接时直接写glfw3即可。
2. 修正Vulkan库路径
Vulkan SDK内置了MinGW兼容的库,路径为C:/VulkanSDK/1.3.275.0/Lib/mingw,而非根目录的Lib(该目录是给MSVC用的)。
3. 修改CMakeLists.txt(两种可选方案)
方案一:手动指定兼容路径
cmake_minimum_required(VERSION 3.27) project(LuxAegisClion) set(CMAKE_CXX_STANDARD 20) add_executable(LuxAegisClion main.cpp) target_include_directories(LuxAegisClion PRIVATE C:/VulkanSDK/1.3.275.0/Include C:/Users/guilh/Documents/Libraries/glfw-3.3.9.bin.WIN64/include C:/Users/guilh/Documents/Libraries/glm ) # 替换为MinGW对应的库路径 link_directories(LuxAegisClion PRIVATE C:/VulkanSDK/1.3.275.0/Lib/mingw C:/Users/guilh/Documents/Libraries/glfw-3.3.9.bin.WIN64/lib-mingw-w64 ) target_link_libraries(LuxAegisClion PRIVATE vulkan-1 glfw3 )
方案二:用CMake自动查找(更规范)
借助find_package自动适配编译器,避免硬编码路径:
cmake_minimum_required(VERSION 3.27) project(LuxAegisClion) set(CMAKE_CXX_STANDARD 20) add_executable(LuxAegisClion main.cpp) # 自动查找Vulkan,兼容MinGW find_package(Vulkan REQUIRED) # 指定GLFW的MinGW版本配置文件路径 find_package(glfw3 REQUIRED PATHS "C:/Users/guilh/Documents/Libraries/glfw-3.3.9.bin.WIN64/lib-mingw-w64/cmake/glfw3") # GLM是头文件库,直接包含 target_include_directories(LuxAegisClion PRIVATE C:/Users/guilh/Documents/Libraries/glm ) # 链接CMake自动识别的兼容库 target_link_libraries(LuxAegisClion PRIVATE Vulkan::Vulkan glfw )
额外注意事项
- 如果使用动态库,需将
glfw3.dll、vulkan-1.dll复制到可执行文件同目录,或添加到系统PATH中。 - 确保清理之前的CMake缓存(删除
cmake-build-debug目录)后重新构建。
内容的提问来源于stack exchange,提问作者AstroZero
相关产品推荐
相关产品推荐

