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

编译PJSIP 2.7 for arm64-v8a时构建失败错误求助

解决PJSIP 2.7编译arm64-v8a时srtp_aes_icm_128未定义引用错误

我之前在给arm64-v8a架构编译PJSIP 2.7的时候,也碰到过完全一样的链接错误——就是srtp_aes_icm_128未定义引用的问题。折腾了一阵终于搞定了,给你分享几个靠谱的解决方向:

  • 重新编译带arm64 AES支持的SRTP库
    这个错误核心是SRTP库没编译出arm64架构下的AES相关符号,大概率是默认编译没开启arm64优化。你可以进入第三方库目录重新编译SRTP:

    cd pjproject-2.7.2/third_party/srtp
    make distclean
    ./configure --host=aarch64-linux-android --enable-arm64-aes
    make
    

    重点是--enable-arm64-aes参数,它会触发arm64硬件AES加速的代码编译,确保srtp_aes_icm_128这类符号被打包进库文件。

  • 确保PJSIP编译时指向正确的arm64架构
    有时候是编译环境变量没设置对,导致PJSIP用了其他架构的SRTP库。先配置好NDK和架构参数(替换成你的NDK实际路径):

    export NDK_ROOT=/your/actual/android-ndk-path
    export TARGET_ABI=arm64-v8a
    export HOST_ARCH=aarch64-linux-android
    

    然后重新配置并编译PJSIP:

    cd pjproject-2.7.2
    ./configure-android --use-ndk-cflags --target=arm64-v8a
    make clean && make dep && make
    

    这样能保证整个编译链都对齐arm64-v8a架构,不会出现跨架构链接的问题。

  • 验证SRTP库是否包含目标符号
    可以用NDK自带的nm工具检查编译后的静态库是否真的有srtp_aes_icm_128:

    $NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-nm pjproject-2.7.2/third_party/lib/libsrtp-arm-unknown-linux-androideabi.a | grep srtp_aes_icm_128
    

    如果没输出,说明SRTP编译确实有问题,回到第一步重新编译;如果有输出,那要检查PJSIP的config_site.h里是否开启了SRTP功能——确保有#define PJMEDIA_HAS_SRTP 1这行配置。

  • 升级SRTP版本(可选方案)
    PJSIP 2.7自带的SRTP版本比较旧,对arm64的支持可能不够完善。你可以下载最新的SRTP稳定版(比如2.4.2),替换掉pjproject-2.7.2/third_party/srtp目录下的内容,再按前面的步骤重新编译,新版本对arm64的兼容性会好很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:45:16