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

CMake已构建库依赖问题:raspicam链接mmal失败

解决CMake配置raspicam依赖mmal的链接问题

1. 修正raspicam库的CMake配置(/myproj/raspicam/src/CMakeLists.txt)

你之前的配置存在两个核心问题:一是链接库时错误地将变量名当作字符串使用,二是未给raspicam库添加运行时路径(rpath),导致生成的libraspicam.so无法指引后续程序找到mmal依赖。修改如下:

# 定位mmal_core库
FIND_LIBRARY(mmalcore_LIBS NAMES mmal_core PATHS ../../userland/build/lib)
# 强制检查库是否找到,避免静默失败
if(NOT mmalcore_LIBS)
    message(FATAL_ERROR "mmal_core library not found!")
endif()

# 链接库时使用变量而非字符串,确保正确关联库路径
target_link_libraries(raspicam ${mmalcore_LIBS})

# 给raspicam库设置运行时路径,适配Yocto交叉编译的相对路径结构
set_target_properties(raspicam PROPERTIES
    # 编译阶段链接器使用的路径
    BUILD_RPATH "../../userland/build/lib"
    # 运行时动态链接器使用的路径,$ORIGIN代表当前库所在目录
    INSTALL_RPATH "$ORIGIN/../../userland/build/lib"
    # 自动将链接时的路径加入INSTALL_RPATH
    INSTALL_RPATH_USE_LINK_PATH TRUE
)

2. 测试程序的CMake配置(/myproj/CMakeLists.txt)

测试程序只需找到并链接raspicam库即可,无需重复处理mmal依赖:

cmake_minimum_required(VERSION 3.10)
project(simpletest_raspicam)

# 定位编译好的raspicam库
FIND_LIBRARY(raspicam_LIBS NAMES raspicam PATHS raspicam/build/src)
if(NOT raspicam_LIBS)
    message(FATAL_ERROR "raspicam library not found!")
endif()

# 生成测试可执行文件
add_executable(simpletest_raspicam simpletest_raspicam.cpp)

# 链接raspicam库
target_link_libraries(simpletest_raspicam ${raspicam_LIBS})

3. 额外注意事项

  • 确认../../userland/build/lib目录下确实存在libmmal_core.so等依赖库
  • Yocto交叉编译时,需确保交叉工具链的CMAKE_SYSROOT等变量配置正确,保证CMake能找到目标架构的库
  • 如果后续将raspicam库安装到系统目录,需根据实际安装路径调整INSTALL_RPATH的相对结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:02:52