【问题标题】:Error building Android webrtc library with openssl使用 openssl 构建 Android webrtc 库时出错
【发布时间】:2022-10-20 22:49:20
【问题描述】:

我正在使用以下配置为 Android 构建 webrtc 库:

gn gen out/Release-arm64 -args='target_os="android" target_cpu="arm64" use_custom_libcxx=false use_custom_libcxx_for_host=false is_debug=false is_component_build=false rtc_include_tests=false symbol_level=0 rtc_enable_symbol_export=false rtc_build_examples=false Treat_warnings_as_errors=false rtc_build_s false rtc_ssl_root="/usr/local/src/openssl-1.1.1k/include"'

但我收到以下错误:

FAILED: libjingle_peerconnection_so.so libjingle_peerconnection_so.so.TOC lib.unstripped/libjingle_peerconnection_so.so 
python3 "../../build/toolchain/gcc_solink_wrapper.py" --readelf="../../third_party/llvm-build/Release+Asserts/bin/llvm-readelf" --nm="../../third_party/llvm-build/Release+Asserts/bin/llvm-nm" --strip=../../third_party/llvm-build/Release+Asserts/bin/llvm-strip  --sofile="./lib.unstripped/libjingle_peerconnection_so.so" --tocfile="./libjingle_peerconnection_so.so.TOC" --output="./libjingle_peerconnection_so.so" -- ../../third_party/llvm-build/Release+Asserts/bin/clang++ -shared -Wl,-soname="libjingle_peerconnection_so.so" -lEGL -Wl,--build-id -fuse-ld=lld -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,-z,max-page-size=4096 -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-rosegment -Wl,--no-call-graph-profile-sort -Wl,--exclude-libs=libvpx_assembly_arm.a --unwindlib=none --target=aarch64-linux-android21 -Wl,-mllvm,-enable-machine-outliner=never -no-canonical-prefixes -Wl,--warn-shared-textrel -Wl,-O2 -Wl,--gc-sections --sysroot=../../third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot -Wl,--warn-shared-textrel -Wl,-z,defs -Wl,--as-needed -Wl,--version-script=../../build/android/android_only_jni_exports.lst -Wl,--dynamic-linker,/system/bin/linker64 -o "./lib.unstripped/libjingle_peerconnection_so.so" @"./libjingle_peerconnection_so.so.rsp" 
ld.lld: error: undefined symbol: SSL_ctrl
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::BeginSSL()) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::BeginSSL()) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::BeginSSL()) in archive obj/rtc_base/librtc_base.a
>>> referenced 5 more times

ld.lld: error: undefined symbol: SSL_CTX_ctrl
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::CreateContext(rtc::SSLMode, bool)) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::CreateContext(rtc::SSLMode, bool)) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_stream_adapter.cc
>>>               rtc_base/openssl_stream_adapter.o:(rtc::OpenSSLStreamAdapter::SetupSSLContext()) in archive obj/rtc_base/librtc_base.a
>>> referenced 3 more times
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

有趣的是,当我在 webrtc 中使用默认的boringssl(构建良好)时,我在构建我的应用程序时遇到了这些相同的链接错误(我使用的是进行相同 ssl 调用的 websockets 库)。

任何反馈表示赞赏。

【问题讨论】:

  • 事实证明,谷歌摆脱了 SSL_xxx_ctrl 函数,将使用这些函数的宏变成了具体的函数。不确定为什么我在使用 openssl 构建 webrtc 时遇到链接错误,但我能够通过使用 webrtc 代码库中的实际 openssl 标头来解决我使用boringsll 构建我的应用程序的问题,这样调用就不会映射到宏。

标签: c++ openssl webrtc-android


【解决方案1】:

如何解决问题?你的意思是你使用webrtc中的boringssl来构建和链接你的websockets程序而不是websockets lib中的openssl? 我不明白这句话。在webrtc.a中的boringssl和pc中的环境中的openssl我还是遇到了repeat功能。使用 openssl 构建有未定义的符号问题。但是 ssl lib 具有这些功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 2020-08-10
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多