Buildroot 2019.02.9编译GStreamer1.14.4出现stray \错误如何修复
问题根因
该报错由Debian 11主机预装的高版本*glib-mkenums(≥2.68)*的转义处理逻辑变更导致:GStreamer 1.14.4的枚举类型生成模板中,#include语句前添加了转义反斜杠,旧版glib-mkenums会自动忽略该转义符,新版会将其原样输出到生成的controller-enumtypes.c文件中,最终触发C语法错误。Linux Mint 18.2自带的glib版本较低,因此没有该兼容问题。
Buildroot 2019.02.9下的修复方案
推荐优先使用方案1,无需修改上游源码,适配性更强。
方案1:强制使用Buildroot内置的glib-mkenums
Buildroot 2019.02.9自带的host-glib工具链版本与GStreamer 1.14.4完全兼容,只需指定GStreamer编译时使用内置工具而非主机工具即可:
- 编辑Buildroot目录下的
package/gstreamer1/gstreamer1.mk文件 - 追加如下配置:
GSTREAMER1_CONF_ENV += GLIB_MKENUMS=$(HOST_DIR)/bin/glib-mkenums
- 重新编译GStreamer包:
make gstreamer1-dirclean && make gstreamer1
方案2:补丁修复GStreamer模板
若方案1不生效,可直接修复GStreamer源码中的模板文件:
- 在
package/gstreamer1/目录下新建补丁文件0001-fix-stray-backslash-in-enumtypes.patch,内容如下:
diff -Naur a/libs/gst/controller/controller-enumtypes.c.template b/libs/gst/controller/controller-enumtypes.c.template --- a/libs/gst/controller/controller-enumtypes.c.template +++ b/libs/gst/controller/controller-enumtypes.c.template @@ -1,6 +1,6 @@ /*** BEGIN file-header ***/ #include "controller-enumtypes.h" -\#include "gstinterpolationcontrolsource.h" -\#include "gstlfocontrolsource.h" +#include "gstinterpolationcontrolsource.h" +#include "gstlfocontrolsource.h" /*** END file-header ***/
- 编辑
package/gstreamer1/gstreamer1.mk,开启自动重配置:
GSTREAMER1_AUTORECONF = YES
- 重新编译GStreamer包即可。
验证方法
编译完成后查看output/build/gstreamer1-1.14.4/libs/gst/controller/controller-enumtypes.c文件,所有#include语句前无多余反斜杠即为修复成功。
内容的提问来源于stack exchange,提问作者vazlsky
相关产品推荐
相关产品推荐

