【发布时间】: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