02-Windows11搭建GStreamer-C++与MSVC开发环境

发布时间:2026/9/4 5:23:37
02-Windows11搭建GStreamer-C++与MSVC开发环境 Windows 11 上搭建 GStreamer C 与 MSVC 开发环境专栏GStreamer C 从零到工程实战· 第 3 篇 / 共 17 篇从零搭建 Windows 11、Visual Studio 2022、MSVC x64、CMake 与 GStreamer MSVC 开发环境并通过三个故障实验掌握排错入口。第 1 课搭建 Windows 11 MSVC x64 开发环境这一课只解决一个目标让官方 GStreamer、命令行工具和你的 MSVC x64 程序使用同一套架构与运行时。一、为什么主线选择 MSVC官方当前对 Windows 新开发的建议是Windows 10 或更新 Visual Studio 2019 或更新官方稳定下载页在“不确定 MSVC 还是 MinGW”时也建议选择 MSVC。因此本教程固定Visual Studio 2022 MSVC x64 GStreamer MSVC x86_64这让初学者只处理 GStreamer 本身而不用在第一课进入 MinGW、不同 CRT 和 Qt 构建链的兼容问题。二、安装 Visual Studio 2022安装 Visual Studio 2022 Community 或更高版本并选择工作负载使用 C 的桌面开发确保包含MSVC v143 x64/x86 build tools Windows 10/11 SDK CMake tools for Windows打开“Developer PowerShell for VS 2022”验证cl cmake--version看到 MSVC 编译器版本和 CMake 版本即可。三、下载哪一个 GStreamer打开https://gstreamer.freedesktop.org/download/选择MSVC x86_64不要混用MSVC x86 MinGW x86_64 MinGW x86 ARM64本教程以 1.28.x 稳定版为基线。1.29.x 是开发系列不作为入门环境。GStreamer 1.28 起 Windows 安装器使用 Inno Setup安装类型通常包括runtime 只运行 devel 运行 头文件 开发库 debug 运行 开发文件 调试符号学习开发至少选择devel如果你需要查看更完整的崩溃栈和插件符号可以选择debug。四、认识安装目录假设安装到C:\gstreamer\1.0\msvc_x86_64重点目录bin\ DLL 和 gst-launch-1.0.exe 等工具 include\ GStreamer / GLib 头文件 lib\ MSVC .lib、pkg-config 文件和辅助数据 lib\gstreamer-1.0\ 插件 DLL请建立一个你自己的环境变量GSTREAMER_ROOT C:\gstreamer\1.0\msvc_x86_64它不是 GStreamer 强制要求的官方变量只是本教程用来避免在 CMake 中写死路径。把下面目录加入PATH%GSTREAMER_ROOT%\bin然后关闭并重新打开 PowerShell 和 Visual Studio。五、先不要设置 GST_PLUGIN_PATH正常安装布局下只要程序能够找到bin中的 GStreamer DLLGStreamer 通常就能从相对位置找到lib\gstreamer-1.0所以初学阶段不要随意设置GST_PLUGIN_PATH GST_PLUGIN_SYSTEM_PATH错误的全局插件路径可能把另一套 GStreamer 插件混进当前进程导致架构冲突 版本冲突 依赖 DLL 缺失 Registry 出现奇怪缓存只有在开发自定义插件或改变部署布局时才有必要显式配置。六、第一次环境验证重新打开 PowerShellgst-launch-1.0--version gst-inspect-1.0 videotestsrc gst-launch-1.0 videotestsrc num-buffers120!autovideosink你应该看到版本信息 videotestsrc 的说明 一个短暂出现的测试视频窗口如果命令找不到$env:Path-split;确认 GStreamer 的bin目录是否存在。如果gst-inspect-1.0 videotestsrc找不到 Element先确认安装类型是否包含插件 再确认没有混入另一套 GStreamer 最后使用 GST_DEBUG3 查看插件加载错误七、建立第一个 CMake MSVC 工程目录hello-gstreamer/ ├─ CMakeLists.txt └─ main.cpp先写CMakeLists.txtcmake_minimum_required(VERSION 3.24) cmake_policy(SET CMP0091 NEW) project(hello_gstreamer LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(GSTREAMER_ROOT $ENV{GSTREAMER_ROOT} CACHE PATH GStreamer MSVC x86_64 installation root) if(NOT EXISTS ${GSTREAMER_ROOT}/include/gstreamer-1.0/gst/gst.h) message(FATAL_ERROR GSTREAMER_ROOT is invalid: ${GSTREAMER_ROOT}) endif() add_executable(hello_gstreamer main.cpp) target_include_directories(hello_gstreamer PRIVATE ${GSTREAMER_ROOT}/include/gstreamer-1.0 ${GSTREAMER_ROOT}/include/glib-2.0 ${GSTREAMER_ROOT}/lib/glib-2.0/include ) target_link_directories(hello_gstreamer PRIVATE ${GSTREAMER_ROOT}/lib ) target_link_libraries(hello_gstreamer PRIVATE gstreamer-1.0 gobject-2.0 glib-2.0 ) # 官方 Windows 包使用 Release CRT。 # 即使生成 Debug 配置也保持 /MD避免跨 CRT 边界混用内存。 set_property(TARGET hello_gstreamer PROPERTY MSVC_RUNTIME_LIBRARY MultiThreadedDLL)暂时只写最小main.cpp#includegst/gst.hintmain(intargc,char*argv[]){gst_init(argc,argv);g_print(GStreamer %s\n,gst_version_string());return0;}从 Developer PowerShell 构建cmake-S.-B build-A x64 cmake--build build--config Release.\build\Release\hello_gstreamer.exe如果运行时提示缺少 DLL而命令行工具能运行通常是启动程序的环境没有继承%GSTREAMER_ROOT%\bin。八、为什么不在这里使用 Visual Studio 属性表官方安装包确实带有 Visual Studio.props文件手动项目也可以使用。本教程选择 CMake 的原因是配置可以进入版本控制 每个依赖一目了然 后续加入 gstapp / gstvideo 更容易 Visual Studio 仍然使用 MSVC 编译这不是强制要求。真正重要的是应用、GStreamer、插件全部是 x64 链接 MSVC 版本的 .lib 运行时能找到同一套 DLL 和插件九、故意制造三个错误错误 1删除 PATH 中的 GStreamer bin预期命令找不到或程序启动时报 DLL 缺失错误 2把 CMake 架构改成 Win32预期链接器报告 x86 与 x64 不兼容错误 3把 GSTREAMER_ROOT 指向另一套安装预期头文件或 .lib 找不到不要把这三个错误“记住”。要学会根据错误发生在配置阶段 链接阶段 启动阶段 插件扫描阶段快速缩小范围。十、本课必须记住主线固定 MSVC x64不混用 MinGW 或 x86。开发安装必须包含头文件和.lib。bin进入 PATH初学阶段不要乱设GST_PLUGIN_PATH。CMake 只是工程配置工具实际编译器仍然是 MSVC。命令行工具通过后再进入 C。专栏导航上一篇从零认识 GStreamerPipeline、Element、Pad 与 Buffer下一篇掌握 gst-launch、gst-inspect 与 gst-discoverer专栏GStreamer C 从零到工程实战