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

CMake问题:如何在仅编译共享库的项目中编译静态librockchip_mpp?

静态构建librockchip_mpp时出现未定义引用的问题

Rockchip MPP仓库包含构建librockchip_mpp库的源码,该库是访问瑞芯微SoCs视频处理单元的必要组件,同时是为瑞芯微平台提供硬件视频加速的某FFmpeg分支的依赖项。我需要构建该FFmpeg分支的静态版本,因此必须构建静态版的librockchip_mpp,但原Rockchip MPP仓库仅支持编译共享库。

我对仓库的CMakeLists.txt文件做了如下修改:

  • 删除不必要的单元测试
  • 移除旧款瑞芯微SoCs对应的librockchip_vpu库
  • 将构建流程从生成共享库改为生成静态库

核心修改集中在mpp/CMakeLists.txt文件,我在这里将librockchip_mpp的构建类型从共享库改为静态库。

但编译得到的librockchip_mpp.a存在大量未定义引用问题,例如执行以下命令后:

# nm mpp/librockchip_mpp.a | grep mpp_frame_deinit
                   U mpp_frame_deinit

这显然不符合预期,因为mpp_frame_deinit函数明确定义在静态库libmpp_base.a中:

# nm mpp/base/libmpp_base.a | grep mpp_frame_deinit
                   U mpp_frame_deinit
  00000000000001b0 T mpp_frame_deinit

并且我在mpp/CMakeLists.txt中已经通过target_link_libraries完成了库的链接配置:

target_link_libraries(${MPP_STATIC} mpp_codec mpp_hal mpp_vproc ${ASAN_LIB}
                      ${BEGIN_WHOLE_ARCHIVE} mpp_base ${END_WHOLE_ARCHIVE})

其中${MPP_STATIC}指代待构建的librockchip_mpp.a,mpp_base即正常工作的静态库libmpp_base.a。

为什么会出现这种符号未定义的问题?我已经花费数周尝试各类在线方案,但始终无法构建出可用的静态librockchip_mpp.a库,希望熟悉CMake的开发者能提供帮助。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:33