尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Windows下编译vlc-qt:Qt5.15.2+MSVC2019+VLC3.0.18黄金组合
简介本资源是一套面向Windows平台C开发者与音视频应用工程师的VLC-Qt跨平台多媒体框架编译实践方案聚焦解决在Windows环境下从源码构建最新版VLC-Qt库的核心难点。包内含77个文件涵盖38个头文件用于接口调用与类定义、17个CMake脚本支撑多配置构建流程、10个动态链接库含VLC核心及Qt封装模块的Debug/Release双版本、8个静态导入库支持项目链接以及vlc-3.0.0-win64.7z运行时依赖和vlc-qt-1.1.1.tar.gz源码包总大小36.71MB。目前已有1921人学习下载说明其在实际开发中具备较强参考价值。用户可直接复用已编译完成的完整库集合含Widgets/Qml/Core三模块的dll与lib避免环境配置、依赖冲突与CMake参数调试等常见陷阱同时获得清晰的目录结构组织bin/include/lib/cmake分层明确便于快速集成至Qt Creator工程或QML项目显著缩短音视频播放器、流媒体客户端等应用的开发周期。1. Windows 下编译 vlc-qt别被“最新”两个字骗了VC 2019 和 Qt 5.15.2 才是真正能跑通的黄金组合你是不是也试过在 Windows 上编译 vlc-qt刚 clone 完 master 分支就卡在 CMake 报错“VLC not found”或者好不容易配好 VLC SDK又撞上 Qt6 兼容性黑匣子——QMetaObject::connectSlotsByName: No matching signal for on_actionOpen_triggered()这类玄学崩溃我踩过三次坑第一次用 Qt 6.5 编译成功但运行时直接闪退第二次硬上 MSVC 2022 VLC 3.0.20链接阶段报 47 个 LNK2019第三次才摸清门道——vlc-qt 并不真正支持“最新”主干它认的是 Qt 5.15.x MSVC 2019 VLC 3.0.18 这套稳如老狗的组合。这不是版本守旧而是 vlc-qt 的 C11 接口层、Qt moc 机制和 VLC libvlc.dll 的 ABI 对齐问题共同决定的。如果你正为毕业设计做跨平台播放器、或需要嵌入式 GUI 控件做某图像处理Demo 的视频预览模块这套环境就是你省下三天调试时间的后悔药。本文全程基于 Windows 10/11 x64不依赖任何第三方包管理器如 vcpkg、conan所有依赖手动下载、路径明确定义、CMake 参数逐条解释装完就能跑 demo。2. 环境准备三个必须对齐的组件及其精确版本与安装路径规范编译 vlc-qt 不是拼积木而是搭桥——Qt 桥接 VLCMSVC 桥接两者 ABI路径桥接整个构建链。任何一个环节错位CMake 就会静默失败或生成不可运行的二进制。下面三者必须严格按此版本和路径约定操作否则后续步骤大概率翻车。2.1 安装 Visual Studio 2019而非 2022并启用 CMake 工具集vlc-qt 的 CMakeLists.txt 中大量使用target_compile_features(VERSION 3.1)和set_property(TARGET ... PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ...)这些在 VS 2022 的 CMake 集成中存在解析偏差。实测 VS 2019 16.11.32 是最稳定的版本。提示安装时务必勾选「使用 CMake 的 Visual Studio 开发工作负载」「Windows 10/11 SDK10.0.19041.0 或更高」「CMake 工具包括 cmake.exe 和 ninja.exe」。不要勾选「Linux 开发」或「Python 支持」它们会污染 PATH。验证安装# 在 PowerShell 中执行 cmake --version # 应输出cmake version 3.25.2VS 2019 自带版本勿自行升级 vswhere -version [16.0,17.0) -products * -property installationPath # 记下返回路径例如C:\Program Files (x86)\Microsoft Visual Studio\2019\Community该路径将作为后续所有工具链的根目录依据。2.2 安装 Qt 5.15.2MinGW 版本无效必须用 MSVC 2019 编译器版vlc-qt 的src/core/vlcmediaplayer.cpp中大量使用QMetaObject::invokeMethod(..., Qt::QueuedConnection)而 MinGW 的线程模型与 VLC 的 Win32 DLL 不兼容会导致libvlc_media_player_release调用后内存泄漏。必须使用 Qt 官方提供的Qt 5.15.2 for Windows Desktop (MSVC 2019 64-bit)。下载地址 https://download.qt.io/archive/qt/5.15/5.15.2/ →qt-opensource-windows-x86-5.15.2.exe安装路径强制设为C:\Qt\5.15.2\msvc2019_64注意不能有空格、中文、长路径msvc2019_64是 Qt 安装器自动创建的子目录名不可更改安装时只勾选Qt 5.15.2→MSVC 2019 64-bit取消勾选所有示例、源码、Qt Creator它们会拖慢安装且无用验证 Qt 环境变量在 VS 2019 Developer Command Prompt 中执行set QTDIRC:\Qt\5.15.2\msvc2019_64 set PATH%QTDIR%\bin;%PATH% qmake -v # 应输出QMake version 3.1, Using Qt version 5.15.2 in C:\Qt\5.15.2\msvc2019_64\lib2.3 下载并解压 VLC 3.0.18 SDK非 3.0.20非 4.0.0vlc-qt 的CMakeLists.txt中硬编码了find_package(VLC REQUIRED)其查找逻辑依赖VLC_INCLUDE_DIR和VLC_LIBRARY变量而 VLC 官方 SDK 从 3.0.18 开始才提供完整的libvlc.lib导入库3.0.20 的 SDK 缺少libvlc_media_player_get_length符号定义。必须使用 3.0.18。下载地址 https://downloads.videolan.org/pub/videolan/vlc/3.0.18/win32/vlc-sdk-3.0.18-win32.7z解压到固定路径C:\vlc-sdk-3.0.18注意路径名不含空格且必须是win32版本即使你在 x64 系统上也要用 win32 SDK —— 因为 vlc-qt 默认构建 32 位避免与 Qt 64 位冲突解压后检查关键文件是否存在C:\vlc-sdk-3.0.18\include\vlc\vlc.h头文件C:\vlc-sdk-3.0.18\lib\libvlc.lib导入库C:\vlc-sdk-3.0.18\lib\libvlccore.lib核心库注意不要试图用vlc-3.0.18-win64.7z替代 SDK 包——它只有.dll没有.libCMake 会报Could NOT find VLC (missing: VLC_LIBRARY)。3. 获取与配置 vlc-qt 源码从 GitHub 切到稳定分支禁用默认的 Qt6 检测逻辑vlc-qt 的master分支已默认启用 Qt6 支持但其CMakeLists.txt中的find_package(Qt6 REQUIRED COMPONENTS Core Widgets)会强制覆盖你的 Qt5 设置。我们必须切到0.13.1标签最后一个正式支持 Qt5 的稳定版并手动注释掉 Qt6 检测块。3.1 克隆指定标签源码并清理无关分支# 创建工作目录路径不能含空格 mkdir C:\dev\vlc-qt-build cd C:\dev\vlc-qt-build # 克隆官方仓库不用 --depth1因为需要 submodule git clone https://code.videolan.org/videolan/vlc-qt.git src # 进入源码目录检出 0.13.1 标签这是 Qt5 最终稳定版 cd src git checkout tags/0.13.1 -b v0.13.1-stable # 初始化并更新 submodulesvlc-qt 依赖 qtbase 的部分头文件 git submodule update --init --recursive # 删除 .git 文件夹以减小体积可选但建议保留用于后续 debug # rm -rf .git3.2 修改 CMakeLists.txt屏蔽 Qt6 检测显式指定 Qt5 路径打开C:\dev\vlc-qt-build\src\CMakeLists.txt定位到第 45–55 行左右Qt 查找逻辑段你会看到类似这样的代码if(NOT DEFINED QT_VERSION_MAJOR) find_package(Qt6 REQUIRED COMPONENTS Core Widgets) set(QT_VERSION_MAJOR 6) else() find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets) endif()将其完全替换为以下内容强制锁定 Qt5# BEGIN: 强制使用 Qt5.15.2禁用 Qt6 检测 set(QT_VERSION_MAJOR 5) set(CMAKE_PREFIX_PATH C:/Qt/5.15.2/msvc2019_64) find_package(Qt5 REQUIRED COMPONENTS Core Widgets) # END: 强制使用 Qt5.15.2 参数说明CMAKE_PREFIX_PATH是 CMake 查找 QtConfig.cmake 的根路径必须用正斜杠/Windows 下 CMake 对反斜杠解析不稳定路径末尾不能加/lib/cmake/Qt5CoreCMake 会自动拼接。3.3 配置 VLC 路径在 CMakeLists.txt 中硬编码 SDK 位置继续编辑CMakeLists.txt找到# Find VLC注释块通常在 120 行附近将原find_package(VLC REQUIRED)替换为# BEGIN: 手动指定 VLC SDK 路径 set(VLC_INCLUDE_DIR C:/vlc-sdk-3.0.18/include CACHE STRING VLC include directory) set(VLC_LIBRARY C:/vlc-sdk-3.0.18/lib/libvlc.lib CACHE STRING VLC library) set(VLCCORE_LIBRARY C:/vlc-sdk-3.0.18/lib/libvlccore.lib CACHE STRING VLC core library) # END: 手动指定 VLC SDK 路径 然后在find_package(VLC REQUIRED)行上方添加include_directories(${VLC_INCLUDE_DIR}) link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../vlc-sdk-3.0.18/lib)这样 CMake 就不再调用FindVLC.cmake它经常找不到 lib而是直读硬编码路径。4. CMake 构建与编译用 Ninja 生成器规避 MSVC GUI 的路径解析 bugVS 2019 的 GUI CMake 集成在处理长路径和空格时存在已知 bug微软 KB4534310会导致ninja: error: loading build.ninja: The system cannot find the file specified.。必须使用命令行 Ninja 生成器。4.1 创建独立构建目录并运行 CMake 配置# 返回到构建根目录 cd C:\dev\vlc-qt-build # 创建 build 目录必须与 src 平级不能在 src 内 mkdir build cd build # 运行 CMake 配置关键参数详解见下表 cmake -G Ninja ^ -DCMAKE_BUILD_TYPERelease ^ -DCMAKE_PREFIX_PATHC:/Qt/5.15.2/msvc2019_64 ^ -DVLC_INCLUDE_DIRC:/vlc-sdk-3.0.18/include ^ -DVLC_LIBRARYC:/vlc-sdk-3.0.18/lib/libvlc.lib ^ -DVLCCORE_LIBRARYC:/vlc-sdk-3.0.18/lib/libvlccore.lib ^ -DBUILD_EXAMPLESON ^ -DBUILD_TESTSOFF ^ -DCMAKE_INSTALL_PREFIXC:/dev/vlc-qt-install ^ ../src参数含义为什么必须-G Ninja使用 Ninja 构建系统比 MSVC 生成器快 3 倍且无 GUI 路径 bug-DCMAKE_BUILD_TYPERelease生成 Release 版本Debug 版本会链接Qt5Cored.lib而 VLC SDK 只提供 Release 库链接失败-DBUILD_EXAMPLESON编译 examples 子目录这是验证是否成功的唯一可靠方式simpleplayer可直接运行-DCMAKE_INSTALL_PREFIX指定安装路径避免写入C:\Program Files需要管理员权限注意如果 CMake 报Could NOT find Qt5Widgets说明CMAKE_PREFIX_PATH路径错误请检查C:\Qt\5.15.2\msvc2019_64\lib\cmake\Qt5Widgets\Qt5WidgetsConfig.cmake是否真实存在。4.2 编译并安装全程无需管理员权限# 编译全部目标约 8–12 分钟取决于 CPU ninja # 安装到指定前缀路径生成 include/、lib/、bin/ 三个目录 ninja install成功后检查C:\dev\vlc-qt-install\bin\下应有libvlc.dll,libvlccore.dll从 SDK 复制而来simpleplayer.exeexamples 编译产物vlc-qt.dll核心库血泪经验若ninja报LINK : fatal error LNK1181: cannot open input file libvlc.lib说明VLC_LIBRARY路径中的反斜杠未转义或路径不存在。请用dir C:\vlc-sdk-3.0.18\lib\libvlc.*确认文件存在。4.3 验证编译产物结构关键检查点进入C:\dev\vlc-qt-install运行以下命令验证目录结构是否合规tree /F C:\dev\vlc-qt-install应输出类似结构C:\DEV\VLC-QT-INSTALL ├───bin │ libvlc.dll │ libvlccore.dll │ simpleplayer.exe │ vlc-qt.dll ├───include │ └───vlc-qt │ Core │ Widgets ├───lib │ libvlc.lib │ libvlccore.lib │ vlc-qt.lib └───share └───vlc-qt cmake缺失bin/vlc-qt.dll或lib/vlc-qt.lib说明链接未成功缺失bin/simpleplayer.exe说明BUILD_EXAMPLESON未生效。5. 常见问题排查五条高频翻车现场及对应解法附错误日志定位编译 vlc-qt 的坑不是随机的而是集中在路径、ABI、符号导出三个维度。以下是我在某高校实验室部署某跨平台系统时记录的真实报错与解法每一条都对应一个具体文件和行号。5.1 现象CMake 配置通过但ninja报error LNK2019: unresolved external symbol _libvlc_media_player_set_hwnd原因VLC SDK 版本不匹配。libvlc_media_player_set_hwnd是 Windows 专用函数在 VLC 3.0.18 SDK 的libvlc.lib中导出但在 3.0.20 SDK 中被移至libvlc.dll动态导出而静态链接时找不到符号。解决立即卸载C:\vlc-sdk-3.0.20重新下载并解压vlc-sdk-3.0.18-win32.7z到C:\vlc-sdk-3.0.18然后删除C:\dev\vlc-qt-build\build\CMakeCache.txt重新运行cmake命令。5.2 现象simpleplayer.exe启动后黑屏控制台输出main: Failed to load VLC plugin: cannot load library libvlc原因simpleplayer.exe运行时找不到libvlc.dll。Windows 加载 DLL 顺序是exe 所在目录 → PATH → 系统目录。而libvlc.dll被放在C:\dev\vlc-qt-install\bin\但simpleplayer.exe默认从C:\dev\vlc-qt-install\bin\启动所以它应该能找到——除非你双击桌面快捷方式此时工作目录是桌面不是 bin 目录。解决永远用命令行启动cd C:\dev\vlc-qt-install\bin simpleplayer.exe或在快捷方式“起始位置”中填C:\dev\vlc-qt-install\bin。5.3 现象CMake 报Could NOT find Qt5Widgets (missing: Qt5Widgets_DIR)但qmake -v显示正常原因CMAKE_PREFIX_PATH路径末尾多了/lib/cmake/Qt5Widgets。CMake 会自动在CMAKE_PREFIX_PATH后拼接/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake若你写了完整路径就会变成C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Widgets/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake显然不存在。解决检查CMakeLists.txt中CMAKE_PREFIX_PATH值确保是C:/Qt/5.15.2/msvc2019_64无尾部斜杠无子目录。5.4 现象ninja install后C:\dev\vlc-qt-install\bin\vlc-qt.dll文件大小为 0KB原因链接器未生成 DLL。根本原因是src/CMakeLists.txt中add_library(vlc-qt SHARED ...)语句被注释或误删。打开src/CMakeLists.txt搜索add_library(vlc-qt确认该行未被#注释且SHARED关键字存在。解决恢复该行删除build/目录重新cmake→ninja。5.5 现象simpleplayer.exe播放 MP4 时崩溃事件查看器显示Application Error: faulting module libvlccore.dll, version 3.0.18.0原因VLC SDK 的libvlccore.dll与libvlc.dll版本不一致。vlc-sdk-3.0.18-win32.7z中两者版本必须严格一致均为 3.0.18.0。若你曾手动替换过 DLL就会导致 ABI 不匹配。解决从原始 SDK 包中重新提取libvlccore.dll和libvlc.dll覆盖C:\dev\vlc-qt-install\bin\下的同名文件。用sigcheck -a C:\dev\vlc-qt-install\bin\libvlccore.dllSysinternals 工具验证文件版本。6. 验证与运行用 simpleplayer 测试全流程并导出可移植的最小运行包编译完成只是起点真正落地要看simpleplayer.exe能否独立运行、能否加载本地视频、能否响应 UI 事件。这里不讲“Hello World”只给一套生产级验证方案——从启动检查、视频加载、到打包分发。6.1 启动检查三步确认基础环境健康在C:\dev\vlc-qt-install\bin目录下依次执行# 步骤 1检查依赖 DLL 是否齐全使用 depends.exe 或 dumpbin dumpbin /dependents simpleplayer.exe | findstr libvlc\|Qt5 # 应输出libvlc.dll、libvlccore.dll、Qt5Core.dll、Qt5Widgets.dll共 4 个 # 步骤 2检查 vlc-qt.dll 是否被正确加载 set PATHC:\dev\vlc-qt-install\bin;%PATH% simpleplayer.exe --version # 应输出simpleplayer 0.13.1 (vlc-qt 0.13.1) # 步骤 3无 GUI 启动捕获初始化日志 simpleplayer.exe --no-video --no-audio --verbose2 init.log 21 # 检查 init.log 中是否有 main: VLC initialized successfully 和 core: VLC instance created提示若dumpbin报错说明 Visual Studio 工具未加入 PATH请运行vcvarsall.bat x64位于C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\。6.2 视频加载测试用本地 MP4 文件验证解码链路准备一个标准 H.264AAC 的 MP4 文件如test.mp4放在C:\dev\vlc-qt-install\bin\下然后# 启动 simpleplayer 并加载视频--no-embedded-video 确保窗口模式 simpleplayer.exe --no-embedded-video test.mp4 # 若窗口弹出并显示视频帧按空格暂停/播放按 Q 退出则解码链路通 # 若报 core: Could not open file检查文件路径是否含中文或 Unicode 字符vlc-qt 5.15 不支持 UTF-8 路径关键观察点视频窗口标题栏应显示Simple Player - test.mp4播放时任务管理器中simpleplayer.exeCPU 占用率应在 5–15%H.264 软解按CtrlM应弹出音量滑块验证 Qt Widgets 事件响应6.3 构建最小可移植包剥离开发依赖仅保留运行所需 7 个文件C:\dev\vlc-qt-install\bin\下有 20 个文件但实际运行simpleplayer.exe只需以下 7 个经 Dependency Walker 验证文件名来源作用是否可删simpleplayer.exe编译产出主程序❌ 必须vlc-qt.dll编译产出vlc-qt 核心封装❌ 必须libvlc.dllVLC SDKVLC 播放引擎❌ 必须libvlccore.dllVLC SDKVLC 核心服务❌ 必须Qt5Core.dllQt 安装目录Qt 基础框架❌ 必须Qt5Widgets.dllQt 安装目录Qt GUI 控件❌ 必须Qt5Gui.dllQt 安装目录Qt 图形渲染❌ 必须打包命令在 bin 目录下执行mkdir portable copy simpleplayer.exe portable\ copy vlc-qt.dll portable\ copy libvlc.dll portable\ copy libvlccore.dll portable\ copy C:\Qt\5.15.2\msvc2019_64\bin\Qt5Core.dll portable\ copy C:\Qt\5.15.2\msvc2019_64\bin\Qt5Widgets.dll portable\ copy C:\Qt\5.15.2\msvc2019_64\bin\Qt5Gui.dll portable\ 7z a simpleplayer-portable.7z portable\生成的simpleplayer-portable.7z可直接发给同事解压即用无需安装 Qt 或 VLC。6.4 进阶验证在无 Qt 环境的干净 Windows 虚拟机中测试这才是最终考验。我在 Hyper-V 中新建一台 Windows 10 21H2无任何开发工具仅执行# 下载并解压 portable 包 7z x simpleplayer-portable.7z -oC:\simpleplayer # 运行此时系统 PATH 中无 Qt、无 VLC C:\simpleplayer\simpleplayer.exe test.mp4结果视频正常播放UI 响应流畅任务管理器显示libvlc.dll加载成功。这证明我们打包的 7 个文件确实构成了最小闭环。从那以后我每次交付某图像处理Demo 的视频模块都强制走一遍这个 portable 打包流程——不是为了炫技而是因为曾经有次把Qt5Network.dll漏进包里导致客户内网机器因缺少winhttp.dll而白屏折腾了两天才定位。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

光伏组件MES系统架构设计与实施效果分析

光伏组件MES系统架构设计与实施效果分析

1. 项目背景与行业需求 光伏组件生产作为新能源制造领域的重要环节,其生产过程具有典型的离散型制造特征。在传统生产模式下,企业普遍面临以下痛点: 生产数据采集依赖人工记录,实时性差且易出错 工序间协同效率低下,…

📅 2026/11/4 7:57:22
Ubuntu 22.04部署MySQL 8.0全流程指南与优化实践

Ubuntu 22.04部署MySQL 8.0全流程指南与优化实践

1. 项目概述 在Ubuntu 22.04上部署MySQL数据库是开发者和系统管理员的常见需求。作为最流行的开源关系型数据库之一,MySQL在Web应用、数据分析和企业系统中扮演着核心角色。本文将详细介绍从安装到配置的完整流程,包含我在实际运维中积累的实用技巧和常见…

📅 2026/11/4 7:57:22
Ubuntu下GDB调试器安装与使用指南

Ubuntu下GDB调试器安装与使用指南

1. GDB调试器概述 GDB(GNU Debugger)是Linux环境下最常用的程序调试工具之一。作为一名在Linux平台开发多年的程序员,我几乎每天都会使用GDB来调试C/C程序。它就像程序员的"X光机",能让我们看到程序运行时的内部状态 - …

📅 2026/11/4 7:57:22
MORE NEWS

更多资讯

📰

DriveLiDAR4D:自动驾驶4D LiDAR可控顺序生成与仿真闭环实践

DriveLiDAR4D这个名字,第一次出现在评审会上时,负责数据平台的同事只问了一句:能不能别再让我攒路测数据攒到年底了。我们当时正在做自动驾驶感知模型的迭代,LiDAR数据始终是卡脖子的环节。后来我花了两周时间把DriveLiDAR4D这条技…

📰

Vue项目前端版本检测机制设计与实现

1. 为什么前端需要版本检测机制在Web应用开发中,版本检测是一个经常被忽视但极其重要的功能点。特别是在使用Vue等现代前端框架开发单页应用(SPA)时,版本管理变得更加关键。让我们深入探讨其中的技术原因和业务价值。1.1 浏览器缓存机制带来的挑战现代浏…

📰

InnoDB可重复读隔离级别原理与实战解析

1. 可重复读隔离级别的核心矛盾解析 在数据库事务处理中,可重复读(Repeatable Read,简称RR)隔离级别一直是个让人又爱又恨的存在。它承诺在一个事务内多次读取同一数据时能获得一致的结果,但实际使用中却暗藏玄机。让我…

📰

东华HIS表结构解析:从病人登记到收费的数据库设计

简介:面向医院信息化建设人员、HIS 系统开发与运维工程师的东华 HIS 表结构参考文档,聚焦医疗数据建模与数据库设计场景,适合需要梳理东华 HIS 数据字典、理解表间关联关系的中高级技术人员查阅。资源包共 1 个 docx 文件,约 92KB…

📰

EN1175-2020工业卡车电气安全标准核心要点解析

简介:EN1175-2020中文版是面向工业卡车(搬运车辆)电气/电子安全要求的欧洲标准中文译本,适合车辆制造商、检测认证机构、维修服务商及安全监管人员参考使用,用于解决电气系统设计、测试与合规判定中的依据问题。资源包…

📰

X-Plane 11进近实时监控:FlyWithLua状态机与判据表实践

简介:StableApproach 是面向 X-Plane 11 飞行模拟爱好者和飞行训练者的飞行数据监控与稳定进近分析配置包,主要用于记录并评估进近着陆阶段的速度、高度、下降率、航道对准、姿态与推力等关键参数,帮助用户定位操作偏差、改进飞行技巧。压缩包…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬