登录
首页 >  Golang >  Go问答

“GStreamer中的Cgo未定义的引用错误”

来源:stackoverflow

时间:2024-02-22 10:48:25 158浏览 收藏

大家好,我们又见面了啊~本文《“GStreamer中的Cgo未定义的引用错误”》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我正在使用 cgo 编写一些与 gstreamer-1.0 库交互的东西。我的一切几乎都工作得很好,但由于某种原因,整个头文件的对象没有正确导入。

go 版本 go1.15.2 linux/amd64 适合任何值得的东西

package main

// #cgo pkg-config: gstreamer-1.0
// #cgo CFLAGS: -Wno-deprecated-declarations
// #include               // using this file extensively with no issues
// #include    // objects in this file are not getting read, but the compiler is having no issue reading it
import "C"

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

func main () {
  // ...
   C.gst_app_sink_pull_sample()  // a non-variadic function that does take args
                                 // but cgo doesn't even think it exists.
  // ...
}

编译器返回的错误:/tmp/go-build/cgo-gcc-prolog:64:对“gst_app_sink_pull_sample” 的未定义引用

我查看了头文件,gst_app_sink_pull_sample确实存在。我可以尝试在本地和 golang docker 容器中重现此内容。

如果我完全删除 include ,错误会有所不同:无法确定 c.gst_app_sink_pull_sample 的名称类型。

那么到底是我的问题还是gstreamer的问题?


解决方案


appsrc 和 appsink 符号不是基础 gstreamer 库的一部分。相反,它们可以在额外的库 gstreamer-app-1.0 中找到。将此库添加到您的 cgo pkgconfig 行中,它应该会找到丢失的符号。

“对 xxx 的未定义引用”意味着 cgo 的 c 编译器识别定义,但找不到实现(由相应的c 库)

这表明您已正确导入 c 头文件。要解决未定义引用的问题,如果您的动态库名为libgstreamer.so.1.0.0,则只需添加如下内容

# cgo LDFLAGS: -lgstreamer

理论要掌握,实操不能落!以上关于《“GStreamer中的Cgo未定义的引用错误”》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>