Я собрал webrt c для linux и получил libwebrtc.a
, используя
gn gen out/Default --args=is_debug=false rtc_use_h264=true target_cpu="x64" target_os="linux" clang_use_chrome_plugins=false use_ghash=false symbol_level=2 use_custom_libcxx=false is_component_ffmpeg=true ffmpeg_branding="Chrome" rtc_include_tests=false rtc_build_examples=true rtc_build_tools=false use_rtti=true rtc_enable_protobuf=false rtc_use_h264=true rtc_link_pipewire=true proprietary_codecs=true
и
ninja -C . webrtc \
peerconnection_client
, но когда я пытаюсь связать stati c webrt c с моим проектом c ++ я получаю следующие 4 ошибки компоновщика:
1. test.cpp:(.text._ZN10H264BypassedEncoderC2ERKN7cricket10VideoCodecERNS_14DCVAgentClientE+0x191):
undefined reference to
`absl::EqualsIgnoreCase(std::basic_string_view<char,
std::char_traits<char> >, std::basic_string_view<char,
std::char_traits<char> >)'
2. CMakeFiles/webRTCserver.dir/src/audio/testEncoder.cpp.o:(.data.rel.ro._ZTVN10testEncoderE[_ZTVN10testEncoderE]+0xb8):
undefined reference to
`webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int,
std::optional<long>)'
3. testDecoderFactory.cpp/testEncoderFactory.cpp:(.text._ZN10testEncoderFactory20GetSupportedEncodersEv+0x20b): undefined reference to
`webrtc::SdpAudioFormat::SdpAudioFormat(std::basic_string_view<char,
std::char_traits<char> >, int, unsigned long,
std::map<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > >&&)'
4. H264BypassedEncoder.cpp.o:(.data.rel.ro._ZTVN10H264BypassedEncoderE[_ZTVN10H264BypassedEncoderE]+0x20):
undefined reference to
`webrtc::VideoEncoder::SetFecControllerOverride(webrtc::FecControllerOverride*)'
Когда я ищу символы в libwebrt c .a, как ошибка 2, как показано ниже:
nm --demangle libwebrtc.a | grep -i webrtc::AudioEncoder::OnReceivedUplinkBandwidth
Я получаю следующий вывод:
0000000000000000 T webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
Теперь я не уверен, почему nm показывает вывод именно так. Но затем, используя ar -d libwebrtc.a <*.o>
, я удалил все файлы с
U webrtc::AudioEncoder::OnReceivedUplinkBandwidth(int, absl::optional<long>)
. Я все еще получаю ошибки компоновщика.
То же самое и с другими неопределенными ссылочными ошибками, кроме webrtc::VideoEncoder::SetFecControllerOverride
, которые Я не уверен, какая цель предоставит.
Вопросы:
Может ли кто-нибудь подсказать мне другой способ отладки ошибок 1,2 и 3 как символы присутствуют в libwebrt c .a
В чем может быть причина того, что ошибки компоновщика 1 и 3 относятся к. cpp файлу, а не к файлу .o, как в ошибке 2
как найти цель ниндзя для сборки webrt c для устранения неопределенной ссылки ошибки 4?
EDIT: Как было предложено в комментарии, чтобы попробовать использовать is_clang = false, я сделал то же самое и получил следующую ошибку при создании файла libwebrt c .a:
[5/2977] CXX obj/api/libjingle_peerconnection_api/sctp_transport_interface.o
FAILED: obj/api/libjingle_peerconnection_api/sctp_transport_interface.o
g++ -MMD -MF obj/api/libjingle_peerconnection_api/sctp_transport_interface.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_X11=1 -DFULL_SAFE_BROWSING -DSAFE_BROWSING_CSD -DSAFE_BROWSING_DB_LOCAL -DCHROMIUM_BUILD -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -DCR_SYSROOT_HASH=e7c53f04bd88d29d075bfd1f62b073aeb69cbe09 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DWEBRTC_ENABLE_PROTOBUF=0 -DWEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE -DRTC_ENABLE_VP9 -DHAVE_SCTP -DWEBRTC_USE_H264 -DWEBRTC_LIBRARY_IMPL -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0 -DWEBRTC_POSIX -DWEBRTC_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -I../.. -Igen -I../../third_party/abseil-cpp -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pipe -B../../third_party/binutils/Linux_x64/Release/bin -pthread -m64 -march=x86-64 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Wall -Werror -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-missing-field-initializers -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g2 -fvisibility=hidden -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -std=gnu++11 -Wno-narrowing -Wno-class-memaccess -fno-exceptions --sysroot=../../build/linux/debian_sid_amd64-sysroot -fvisibility-inlines-hidden -Wnon-virtual-dtor -Woverloaded-virtual -c ../../api/sctp_transport_interface.cc -o obj/api/libjingle_peerconnection_api/sctp_transport_interface.o
In file included from /usr/include/c++/7/utility:68:0,
from ../../api/sctp_transport_interface.cc:11:
/usr/include/c++/7/x86_64-redhat-linux/bits/c++config.h:3:10: fatal error: bits/wordsize.h: No such file or directory
#include <bits/wordsize.h>