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

交叉编译树莓派时GStreamer函数未定义引用问题求助

解决树莓派交叉编译GStreamer未定义引用问题

核心问题定位

链接报错undefined reference to 'gst_app_src_set_caps'本质是测试项目或ProjectA未正确链接GStreamer的app功能库(libgstapp-1.0.so),同时你的CMake配置存在几处关键疏漏。

具体修复步骤

1. 替换路径写法,避免解析异常

CMake中~无法被可靠解析,将所有路径替换为绝对路径,示例:

include_directories(/home/你的用户名/Project/inc/) 
include_directories(/home/你的用户名/Project/inc/gstreamer-1.0/) 
link_directories(/home/你的用户名/Project/lib/)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /home/你的用户名/Project/lib;/usr/lib) 

2. 明确指定链接GStreamer相关库

在ProjectA和测试项目的CMakeLists.txt中,强制添加GStreamer依赖库的链接:

# ProjectA的CMakeLists.txt
target_link_libraries(ProjectA
    gstapp-1.0
    gstreamer-1.0
    gobject-2.0
    glib-2.0
)

# 测试项目的CMakeLists.txt
target_link_libraries(project-test
    ProjectA
    gstapp-1.0
    gstreamer-1.0
    gobject-2.0
    glib-2.0
)

确认从树莓派复制的lib文件夹中存在libgstapp-1.0.so、libgstreamer-1.0.so等对应库文件。

3. 修正系统根目录与查找规则

手动复制依赖到~/Project的情况下,调整CMake的sysroot和查找规则,强制只在指定目录查找依赖:

set(CMAKE_SYSROOT /home/你的用户名/Project)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

4. 验证库架构匹配

用交叉编译工具链的readelf检查复制的库是否为aarch64架构,避免误拿主机系统的库:

/x-tools/aarch64-rpi3-linux-gnu/bin/aarch64-rpi3-linux-gnu-readelf -h /home/你的用户名/Project/lib/libgstapp-1.0.so | grep Machine

输出需包含AArch64,否则说明库文件来源错误。

5. 升级CMake版本(推荐)

CMake 2.6过于老旧,缺少现代交叉编译特性,Ubuntu 18.04可通过以下命令升级:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install cmake

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:25:16