使用 OpenSSL for Android 构建 PJSIP 时出现“重复符号”错误

问题描述 投票:0回答:1

我正在尝试使用具有 OpenSSL 支持的 PJSIP 库构建用于 SIP 连接的 Android 应用程序。首先,我使用 OpenSSL 构建了 PJSIP,接下来尝试生成 SWIG Java 绑定,输入命令

make
后,在 aes_icm.c 和 aes_icm_ossl.c 文件中出现三个重复符号错误。如果我不使用 OpenSSL,一切都会正常。

我不是C/C++专家,所以不明白如何解决这个问题。请帮忙。

在 MacOS 上构建,PJSIP 版本:2.14.1、NDK 22.1.7171670 和 OpenSSL 3.3.1。

ld: error: duplicate symbol: srtp_aes_icm_128
>>> defined at aes_icm.c
>>>            aes_icm.o:(srtp_aes_icm_128) in archive /pjproject/third_party/lib/libsrtp-aarch64-unknown-linux-android.a
>>> defined at aes_icm_ossl.c
>>>            aes_icm_ossl.o:(.data.rel.ro.srtp_aes_icm_128+0x0) in archive /pjproject/third_party/lib/libsrtp-aarch64-unknown-linux-android.a

ld: error: duplicate symbol: srtp_aes_icm_256
>>> defined at aes_icm.c
>>>            aes_icm.o:(srtp_aes_icm_256) in archive /pjproject/third_party/lib/libsrtp-aarch64-unknown-linux-android.a
>>> defined at aes_icm_ossl.c
>>>            aes_icm_ossl.o:(.data.rel.ro.srtp_aes_icm_256+0x0) in archive /pjproject/third_party/lib/libsrtp-aarch64-unknown-linux-android.a

ld: error: duplicate symbol: srtp_mod_aes_icm
>>> defined at aes_icm.c
>>>            aes_icm.o:(srtp_mod_aes_icm) in archive /pjproject/third_party/lib/libsrtp-aarch64-unknown-linux-android.a
>>> defined at aes_icm_ossl.c
>>>            aes_icm_ossl.o:(.data.srtp_mod_aes_icm+0x0) in archive /pjproject/third_party/lib/libsrtp-aarch64-unknown-linux-android.a
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [android/pjsua2/src/main/jniLibs/arm64-v8a/libpjsua2.so] Error 1
make: *** [java] Error 2
android c++ c pjsip
1个回答
0
投票

这里发生的情况是 PJSIP SRTP 库和 Open SSL 的默认实现中都定义了重复的符号。具体来说,PJSIP SRTP 有自己的符号

aes_icm.c
实现,该符号已由 OpenSSL 实现为
aes_icm_ossl.c

(希望)快速且简单的修复方法是排除 SRTP 版本。您可以通过找到管理 SRTP 的构建配置文件 PJSIPs(通常称为

config_site.h
,可能位于此路径
pjproject/pjlib/include/pj/config_site.h
)并添加以下 3 行来完成此操作:

#define PJMEDIA_HAS_SRTP 1
#define SRTP_AES_ICM 0
#define SRTP_AES_ICM_OSSL 1

这应该禁用 AES 的 SRTP 实现并启用 OpenSSL 版本的使用。希望有帮助,如果您遇到更多问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.