使用gstglfilter时GStreamer CMake项目出现链接错误该如何解决?
核心问题说明
- 你对readelf的结果理解有误,
UND标记表示对应符号是libgstopengl.so的依赖项,而非在该库中定义,这些符号的实际定义在libgstgl-1.0.so中 /usr/lib/gstreamer-1.0目录下的文件都是GStreamer运行时动态加载的插件,无需在编译期链接,你手动添加libgstopengl.so的导入库属于错误操作
解决步骤
步骤1:清理错误配置
删除你后续添加的gstopenglextras导入库相关的所有代码,以及target_link_libraries中对gstopenglextras的引用。
步骤2:优化GStreamer查找配置
使用pkg_check_modules的IMPORTED_TARGET参数自动处理头文件路径、库路径和链接依赖,避免手动拼接变量出错:
pkg_check_modules(GST REQUIRED IMPORTED_TARGET gstreamer-1.0>=1.4 gstreamer-sdp-1.0>=1.4 gstreamer-video-1.0>=1.4 gstreamer-plugins-base-1.0>=1.4 gstreamer-app-1.0>=1.4 gstreamer-gl-1.0>=1.4)
步骤3:修正链接配置
IMPORTED_TARGET会自动传递所有编译和链接参数,无需手动配置target_include_directories的GST_INCLUDE_DIRS部分,只需要给所有用到GStreamer接口的目标链接对应的导入目标即可:
# 如果你写的drawCallback函数在GUI_lib中,需要给GUI_lib也链接GStreamer依赖 target_link_libraries(GUI_lib PUBLIC PkgConfig::GST ${OTHER_FIND_PACKAGE_INCLUDE_DIRS}) # 原someproject的链接配置简化为 target_link_libraries(someproject PUBLIC "${OTHER_FIND_PACKAGE_LIBS}" PkgConfig::GST -lGL -lepoxy)
可选:单独验证gstreamer-gl组件
如果修改后仍提示libgstgl-1.0.so相关错误,可以单独查找该组件确认:
pkg_check_modules(GST_GL REQUIRED IMPORTED_TARGET gstreamer-gl-1.0>=1.4) # 链接时额外添加PkgConfig::GST_GL target_link_libraries(someproject PUBLIC PkgConfig::GST_GL)
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

