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

Windows下使用VCPKG时CMake无法找到EGL组件

问题:Windows下VCPKG安装EGL后CMake无法识别

将Linux下正常运行的项目移植到Windows,使用VCPKG管理第三方库,freetype、openssh等多数库均可被CMake正确识别,但OpenGL相关配置失败——CMake能找到OpenGL,却找不到已通过VCPKG安装的EGL库。


VCPKG安装目录文件列表

库文件(installed/x64-windows/lib/)

ANGLE.lib     brotlicommon.lib              cairo.lib       freetype.lib  jpeg.lib              libcurl.lib         libpgport.lib    libssl.lib          libxml2.lib     mbedtls.lib   pkgconfig/       sqlite3.lib      utf8proc.lib
GlU32.Lib     brotlidec.lib                 charset.lib     getopt.lib    leptonica-1.83.1.lib  libecpg.lib         libpgtypes.lib   libwebp.lib         lz4.lib         mbedx509.lib  pthreadVC3.lib   ssh.lib          zlib.lib
OpenGL32.Lib  brotlienc.lib                 dl.lib          gif.lib       libEGL.lib            libecpg_compat.lib  libpng16.lib     libwebpdecoder.lib  lzma.lib        openjp2.lib   pthreadVCE3.lib  tesseract53.lib  zstd.lib
ZXing.lib     bz2.lib                       fmt.lib         iconv.lib     libGLESv2.lib         libexpat.lib        libpq.lib        libwebpdemux.lib    lzo2.lib        pixman-1.lib  pthreadVSE3.lib  tiff.lib
archive.lib   cairo-script-interpreter.lib  fontconfig.lib  intl.lib      libcrypto.lib         libpgcommon.lib     libsharpyuv.lib  libwebpmux.lib      mbedcrypto.lib  pkgconf.lib   spdlog.lib       turbojpeg.lib

头文件(installed/x64-windows/include/)

EGL/    ZXing/           dirent.h         expat_config.h    glm/        jpeglib.h       libssh/            lz4hc.h       opj_stdint.h        pgtypes_interval.h   postgres_ext.h  sqlca.h                 tiff.h       zdict.h
GL/     _ptw32.h         dlfcn.h          expat_external.h  headers/    leptonica/      libxml/            lzma/         pg_config.h         pgtypes_numeric.h    psa/            sqlda-compat.h          tiffconf.h   zlib.h
GLES/   archive.h        ecpg_config.h    fmt/              iconv.h     libcharset.h    libxml2/           lzma.h        pg_config_ext.h     pgtypes_timestamp.h  pthread.h       sqlda-native.h          tiffio.h     zstd.h
GLES2/  archive_entry.h  ecpg_informix.h  fontconfig/       informix/   libintl.h       localcharset.h     lzo/          pg_config_manual.h  pixman-1/            sched.h         sqlda.h                 tiffvers.h   zstd_errors.h
GLES3/  brotli/          ecpgerrno.h      freetype/         internal/   libpng16/       lz4.h              mbedtls/      pg_config_os.h      pkgconf/             semaphore.h     sqlite3-vcpkg-config.h  turbojpeg.h
GLSC/   bzlib.h          ecpglib.h        ft2build.h        jconfig.h   libpq/          lz4file.h          openjpeg.h    pgtypes.h           png.h                server/         sqlite3.h               utf8proc.h
GLSC2/  cairo/           ecpgtype.h       getopt.h          jerror.h    libpq-events.h  lz4frame.h         openssl/      pgtypes_date.h      pngconf.h            spdlog/         sqlite3ext.h            webp/
KHR/    curl/            expat.h          gif_lib.h         jmorecfg.h  libpq-fe.h      lz4frame_static.h  opj_config.h  pgtypes_error.h     pnglibconf.h         sql3types.h     tesseract/              zconf.h

简化后的CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
find_package(OpenGL REQUIRED COMPONENTS OpenGL EGL)

include_directories(OpenGL::EGL OpenGL::GL)

set (GL_HEADERS
    quegl.h
)
set (GL_SOURCES
    quegl.cpp
)
add_library (quillkhronos SHARED ${GL_HEADERS} ${GL_SOURCES} )
target_link_libraries (quillkhronos LINK_PUBLIC quill OpenGL::EGL OpenGL::GL )

CMake配置输出

Running C:\Qt\Tools\CMake_64\bin\cmake.exe -S C:/projects/quill -B C:/projects/build-quill-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug "-DENABLE_OPENGL:BOOL=ON" in C:\projects\build-quill-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug.
-- VCPKG-Info: CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL set to MinSizeRel;Release;
-- VCPKG-Info: CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO set to RelWithDebInfo;Release;
CMake Error at C:/Qt/Tools/CMake_64/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenGL (missing: EGL)
Call Stack (most recent call first):
  C:/Qt/Tools/CMake_64/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  C:/Qt/Tools/CMake_64/share/cmake-3.23/Modules/FindOpenGL.cmake:443 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  C:/projects/vcpkg/scripts/buildsystems/vcpkg.cmake:853 (_find_package)
  quillkhronos/CMakeLists.txt:4 (find_package)


-- Configuring incomplete, errors occurred!
See also "C:/projects/build-quill-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug/CMakeFiles/CMakeOutput.log".
See also "C:/projects/build-quill-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug/CMakeFiles/CMakeError.log".
CMake process exited with exit code 1.

Elapsed time: 00:00.

解决方案

原因分析

Windows原生OpenGL库不包含EGL,VCPKG安装的EGL来自ANGLE组件,而CMake内置的FindOpenGL.cmake在Windows环境下默认不会检索VCPKG提供的EGL组件,导致识别失败。

解决步骤

方案1:手动定位EGL库

修改CMakeLists.txt,先手动查找EGL的头文件和库文件,再创建导入目标:

cmake_minimum_required(VERSION 3.8)

# 手动查找EGL
find_path(EGL_INCLUDE_DIR NAMES EGL/egl.h PATHS ${VCPKG_INSTALLED_DIR}/x64-windows/include)
find_library(EGL_LIBRARY NAMES libEGL PATHS ${VCPKG_INSTALLED_DIR}/x64-windows/lib)

if(NOT EGL_INCLUDE_DIR OR NOT EGL_LIBRARY)
    message(FATAL_ERROR "EGL library not found!")
endif()

# 创建EGL导入目标
add_library(EGL::EGL UNKNOWN IMPORTED)
set_target_properties(EGL::EGL PROPERTIES
    IMPORTED_LOCATION "${EGL_LIBRARY}"
    INTERFACE_INCLUDE_DIRECTORIES "${EGL_INCLUDE_DIR}"
)

# 查找原生OpenGL
find_package(OpenGL REQUIRED COMPONENTS OpenGL)

include_directories(EGL::EGL OpenGL::GL)

set (GL_HEADERS
    quegl.h
)
set (GL_SOURCES
    quegl.cpp
)
add_library (quillkhronos SHARED ${GL_HEADERS} ${GL_SOURCES} )
target_link_libraries (quillkhronos LINK_PUBLIC quill EGL::EGL OpenGL::GL )

方案2:直接依赖ANGLE包

VCPKG中的EGL属于ANGLE包,直接查找ANGLE来获取EGL组件:

cmake_minimum_required(VERSION 3.8)
find_package(ANGLE REQUIRED)
find_package(OpenGL REQUIRED COMPONENTS OpenGL)

include_directories(ANGLE::EGL OpenGL::GL)

set (GL_HEADERS
    quegl.h
)
set (GL_SOURCES
    quegl.cpp
)
add_library (quillkhronos SHARED ${GL_HEADERS} ${GL_SOURCES} )
target_link_libraries (quillkhronos LINK_PUBLIC quill ANGLE::EGL OpenGL::GL )

方案3:确认VCPKG工具链加载

确保CMake配置时指定了VCPKG工具链文件,示例命令:

cmake .. -DCMAKE_TOOLCHAIN_FILE=C:/projects/vcpkg/scripts/buildsystems/vcpkg.cmake

验证

修改后重新运行CMake,即可成功识别EGL库并完成项目配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:55