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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:05:16