编译GStreamer文件遇链接错误:未定义符号_gst_webrtc_session_description_get_type
GStreamer编译链接错误排查与解决
问题背景
编译GStreamer WebRTC相关代码时,遭遇链接错误,无法找到gst_webrtc_session_description_get_type符号。
原编译命令
gcc file-name.c -o file-name \ `pkg-config --cflags --libs gstreamer-1.0 gstreamer-plugins-bad-1.0 gstreamer-plugins-base-1.0` \ -v && ./file-name
相关头文件信息
代码中引用的GST_TYPE_WEBRTC_SESSION_DESCRIPTION宏定义在/opt/homebrew/Cellar/gst-plugins-bad/1.20.3_1/include/gstreamer-1.0/gst/webrtc/rtcsessiondescription.h路径下,头文件关键代码如下:
#define GST_TYPE_WEBRTC_SESSION_DESCRIPTION (gst_webrtc_session_description_get_type()) GST_WEBRTC_API GType gst_webrtc_session_description_get_type(void);
编译错误日志
Undefined symbols for architecture arm64: "_gst_webrtc_session_description_get_type", referenced from: _on_offer_created in simple-webrtc-example-1deda3.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
原因分析
尽管GST_TYPE_WEBRTC_SESSION_DESCRIPTION的头文件归属gst-plugins-bad,但在较新的GStreamer版本中,WebRTC相关实现已从gst-plugins-bad拆分出来成为独立组件。使用pkg-config --libs gstreamer-plugins-bad-1.0并不会自动链接WebRTC所需的库文件,导致链接阶段无法找到对应符号。
解决方法
将编译命令中的gstreamer-plugins-bad-1.0替换为专门的WebRTC pkg-config模块gstreamer-webrtc-1.0,修改后的编译命令如下:
gcc simple-webrtc-example.c -o simple-webrtc-example `pkg-config --cflags --libs gstreamer-1.0 gstreamer-webrtc-1.0 gstreamer-plugins-base-1.0` && ./simple-webrtc-example
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

