CMake构建GStreamer MPEGTS项目时ld链接报错的排查
GStreamer MPEGTS插件CMake链接错误解决
初始编译状态
基于GStreamer官方MPEGTS插件示例实现视频流录制功能时,直接执行如下gcc命令可顺利完成编译,程序运行时录制功能无异常:gcc mpegtstest.c -o mpegtstest pkg-config --cflags --libs gstreamer-1.0 gstreamer-mpegts-1.0 -v
切换CMake构建后的异常表现
项目迁移到CMake+Make构建流程后,出现以下问题:
- CMake配置环节可正常完成构建文件生成,日志显示已成功检测到gstreamer-mpegts-1.0(版本1.6.3)
- 执行
make --trace跟踪构建流程,mpegtstest.c.o目标文件可正常完成编译,进入链接阶段时报错:/usr/bin/ld: cannot find -lgstreamer-mpegts-1.0
排查过程
- 检索公开的同类构建问题解决方案、参考开源项目的CMake配置片段,始终未定位到故障原因
- 逐行核对项目CMakeLists.txt中gstreamer-mpegts模块的相关配置,最终定位到问题触发点:CMake变量名书写不符合语法规范
问题根因与修复
原CMakeLists.txt中,配置MPEGTS头文件引用路径的语句存在变量名错误:include_directories(${GSTREAMER-MPEGTS_INCLUDE_DIRS})
CMake语法要求变量名仅可包含字母、数字、下划线,上述带连字符的写法会被CMake解析为两个独立变量的减法运算,最终传入
include_directories的是空值,导致链接阶段无法正确识别gstreamer-mpegts-1.0的库搜索路径。
修复方法:将变量名替换为符合CMake命名规范的下划线格式:include_directories(${GSTREAMER_MPEGTS_INCLUDE_DIRS})
修改完成后重新执行构建,流程即可恢复正常。
内容的提问来源于stack exchange,提问作者heych
相关产品推荐
相关产品推荐

