使用vcpkg和CMake运行uWebsockets示例遇链接错误求助
问题解决:vcpkg清单模式集成uWebsockets时链接错误(LNK1104: 无法打开uv.lib)
你的vcpkg.json配置是正确的,问题出在CMakeLists.txt的依赖处理方式上——你手动查找头文件但没有正确链接库,也没有利用vcpkg提供的CMake导入目标来自动处理依赖链。
修正步骤:
1. 修改根目录CMakeLists.txt
替换手动查找头文件的逻辑,改用find_package获取uWebsockets的CMake导入目标:
cmake_minimum_required(VERSION 3.24) project(my-app VERSION 1.0.0) set(CMAKE_CXX_STANDARD 20) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # 替换find_path,使用vcpkg提供的CMake配置查找uWebsockets find_package(UWebsockets REQUIRED) add_subdirectory(examples)
2. 修改examples子目录CMakeLists.txt
删除手动设置头文件目录的代码,直接链接uWebsockets的导入目标(该目标会自动包含所有依赖的头文件和库链接):
cmake_minimum_required(VERSION 3.24) project(projExamples VERSION 1.0.0) set(CMAKE_CXX_STANDARD 20) add_executable(EchoServerExample EchoServer.cpp) # 链接uWebsockets的导入目标,自动处理头文件和依赖库(如libuv、usockets) target_link_libraries(EchoServerExample PRIVATE UWebsockets::UWebsockets)
原理说明:
vcpkg为大部分库(包括uWebsockets)提供了CMake配置文件,会生成形如UWebsockets::UWebsockets的导入目标。使用target_link_libraries链接该目标时,CMake会自动处理:
- 目标的头文件路径(无需手动
target_include_directories) - 所有依赖库的链接(比如libuv、usockets等,这正是你之前缺失的部分)
- 编译选项、定义等必要配置
这样修改后,重新配置CMake并编译,就能解决链接错误问题。
内容的提问来源于stack exchange,提问作者shashashamti2008
相关产品推荐
相关产品推荐

