编译PJSIP 2.7 for 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

