You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cgo调用GStreamer-1.0时gst_app_sink_pull_sample报‘undefined reference’错误

解决Cgo调用GStreamer gst_app_sink_pull_sample时的未定义引用问题

这个问题既不是GStreamer本身的问题,也不是Go/Cgo的bug,完全是链接阶段的配置遗漏导致的。

问题原因分析

你已经正确引入了gst/app/gstappsink.h头文件,所以编译器能识别gst_app_sink_pull_sample的函数声明,但链接器找不到这个函数的实现——因为GStreamer的appsink/appsrc这类应用层组件属于单独的gstreamer-app-1.0模块,并不包含在核心的gstreamer-1.0库中。你当前的pkg-config指令只告诉Cgo去链接核心库,漏掉了app模块的库文件,所以才会出现undefined reference错误。

修复方法

只需要修改#cgo pkg-config的参数,把gstreamer-app-1.0模块加进去即可:

package main

// #cgo pkg-config: gstreamer-1.0 gstreamer-app-1.0
// #cgo CFLAGS: -Wno-deprecated-declarations
// #include <gst/gst.h>
// #include <gst/app/gstappsink.h>
import "C"

func init () {
    C.gst_init(nil, nil)
}

func main () {
    // 注意:这里必须传入有效的GstAppSink*实例,否则运行时会崩溃
    // 示例:假设你已经创建并初始化了sink对象
    // sink := C.gst_app_sink_new()
    sample := C.gst_app_sink_pull_sample(sink)
    // ...后续处理逻辑
}

额外提醒

你当前代码里的gst_app_sink_pull_sample()没有传参,这个函数需要接收一个GstAppSink*类型的实例,即使链接成功,运行时也会直接崩溃,记得补上有效的对象引用。

内容的提问来源于stack exchange,提问作者aizimmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:27:36