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

Gstreamer 1.13.91/1.14.0在Android平台构建失败求助

解决GStreamer 1.13.91/1.14.0 Android编译时libcrypto符号重复定义问题

我之前帮开发者排查过类似的GStreamer Android编译冲突问题,你的情况大概率是GStreamer 1.13+版本的预编译包中,libcrypto.a里的SHA1实现和NDK工具链、或者GStreamer自身其他模块的同名符号发生了冲突。下面是几个针对性的解决方案:

1. 调整链接器参数,临时规避冲突

这是最快的临时解决办法,在你的Android项目的编译配置(比如Android.mk或者build.gradle的ndk配置块)中添加链接器参数,允许重复定义的符号:

# 在Android.mk中添加
LOCAL_LDFLAGS += -Wl,--allow-multiple-definition

或者在Gradle的ndk配置里:

android {
    defaultConfig {
        ndk {
            ldFlags += "-Wl,--allow-multiple-definition"
        }
    }
}

注意:这只是临时方案,可能会掩盖其他潜在问题,建议找到根源后再替换成更稳妥的方案。

2. 检查GStreamer依赖,排除重复的crypto模块

GStreamer 1.13+版本的预编译包可能默认包含了gst-plugins-bad或gst-plugins-base中的crypto相关插件,这些插件可能和libcrypto.a产生符号冲突。你可以尝试:

  • 查看你的项目依赖的GStreamer模块列表,去掉不必要的crypto相关模块(比如gst-plugins-bad:crypto)
  • 在配置GStreamer时,只引入你实际需要的插件,避免冗余依赖

3. 切换到更兼容的NDK版本

虽然你试过NDK 12-16,但建议尝试NDK r14b——这个版本是GStreamer 1.14.x官方推荐的兼容版本,很多开发者反馈用这个版本能规避这类符号冲突问题。

4. 自定义编译GStreamer,控制crypto实现

如果预编译包的问题无法通过上述方法解决,建议从源码编译GStreamer 1.14.0 for Android:

  • 克隆GStreamer 1.14.0的源码仓库,切换到对应tag
  • 在编译配置中禁用内部的SHA1实现,或者指定使用系统的crypto库:
    ./meson setup build-android \
      --cross-file android_arm64_cross.txt \
      -Dcrypto=system \
      -Dgst-plugins-bad:crypto=disabled
    
  • 编译后用自己生成的库替换预编译包,这样能精准控制依赖的符号来源

5. 检查链接顺序,优先加载正确的符号

调整库的链接顺序,让系统或GStreamer的核心库先被链接,覆盖重复的符号。比如在LOCAL_LDFLAGS中把libcrypto.a的位置移到最后:

LOCAL_LDFLAGS += -latomic -lgstreamer-1.0 -lgstbase-1.0 ... -lcrypto

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:42:13