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
相关产品推荐
相关产品推荐

