交叉编译树莓派时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
相关产品推荐
相关产品推荐

