"std::_List_node_base::reverse()","std::_List_node_base::swap(std::_List_node_base&, std::_List_node

本文记录了解决音视频SDK在iOS平台编译过程中遇到的多个符号未找到的问题,通过逐步引入缺失的系统框架,最终成功解决了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天写项目,遇到了如下问题:

Undefined symbols for architecture arm64:

  "std::_List_node_base::reverse()", referenced from:

      webrtc::PayloadSplitter::SplitRed(std::list<webrtc::Packet*, std::allocator<webrtc::Packet*> >*) in libHyphenateFullSDK.a(payload_splitter.o)

  "std::_List_node_base::swap(std::_List_node_base&, std::_List_node_base&)", referenced from:

      void std::list<webrtc::DtmfEvent, std::allocator<webrtc::DtmfEvent> >::sort<bool (*)(webrtc::DtmfEvent const&, webrtc::DtmfEvent const&)>(bool (*)(webrtc::DtmfEvent const&, webrtc::DtmfEvent const&)) in libHyphenateFullSDK.a(dtmf_buffer.o)

  "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::_M_sync(char*, unsigned long, unsigned long)", referenced from:

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  "std::ostream& std::ostream::_M_insert<void const*>(void const*)", referenced from:

      webrtc::voe::RemixAndResample(webrtc::AudioFrame const&, webrtc::PushResampler<short>*, webrtc::AudioFrame*) in libHyphenateFullSDK.a(utility.o)

      webrtc::voe::DownConvertToCodecFormat(short const*, int, int, int, int, int, short*, webrtc::PushResampler<short>*, webrtc::AudioFrame*) in libHyphenateFullSDK.a(utility.o)

      webrtc::acm2::ACMResampler::Resample10Msec(short const*, int, int, int, int, short*) in libHyphenateFullSDK.a(acm_resampler.o)

  "std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)", referenced from:

      char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::string::_Rep::_S_terminal", referenced from:

      char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::__throw_logic_error(char const*)", referenced from:

      char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(unsigned long, char, std::allocator<char> const&)", referenced from:

      Json_em::StyledWriter::indent() in libHyphenateFullSDK.a(jsoncpp.o)

  "std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:

      std::_Rb_tree<Json_em::Value::CZString, std::pair<Json_em::Value::CZString const, Json_em::Value>, std::_Select1st<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::less<Json_em::Value::CZString>, std::allocator<std::pair<Json_em::Value::CZString const, Json_em::Value> > >::erase(std::_Rb_tree_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::AudioConferenceMixerImpl::UpdateToMix(std::list<webrtc::AudioFrame*, std::allocator<webrtc::AudioFrame*> >*, std::list<webrtc::AudioFrame*, std::allocator<webrtc::AudioFrame*> >*, std::map<int, webrtc::MixerParticipant*, std::less<int>, std::allocator<std::pair<int const, webrtc::MixerParticipant*> > >*, unsigned long&) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      webrtc::BitrateControllerImpl::NormalRateAllocation(unsigned int, unsigned char, unsigned int, unsigned int) in libHyphenateFullSDK.a(bitrate_controller_impl.o)

      webrtc::ReceiveStatisticsImpl::~ReceiveStatisticsImpl() in libHyphenateFullSDK.a(receive_statistics_impl.o)

      non-virtual thunk to webrtc::ReceiveStatisticsImpl::~ReceiveStatisticsImpl() in libHyphenateFullSDK.a(receive_statistics_impl.o)

      non-virtual thunk to webrtc::ReceiveStatisticsImpl::~ReceiveStatisticsImpl() in libHyphenateFullSDK.a(receive_statistics_impl.o)

      webrtc::ReceiveStatisticsImpl::~ReceiveStatisticsImpl() in libHyphenateFullSDK.a(receive_statistics_impl.o)

      ...

  "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)", referenced from:

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::ostream::operator<<(short)", referenced from:

      webrtc::NetEqImpl::DecodeLoop(std::list<webrtc::Packet*, std::allocator<webrtc::Packet*> >*, webrtc::Operations*, webrtc::AudioDecoder*, int*, webrtc::AudioDecoder::SpeechType*) in libHyphenateFullSDK.a(neteq_impl.o)

  "std::basic_ios<char, std::char_traits<char> >::widen(char) const", referenced from:

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::_Rb_tree_decrement(std::_Rb_tree_node_base const*)", referenced from:

      Json_em::Value::size() const in libHyphenateFullSDK.a(jsoncpp.o)

  "std::runtime_error::runtime_error(std::string const&)", referenced from:

      Json_em::Value::asString() const in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Value::operator[](int) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::operator>>(std::istream&, Json_em::Value&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Value::CommentInfo::setComment(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Value::CZString::CZString(char const*, Json_em::Value::CZString::DuplicationPolicy) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Value::CZString::CZString(Json_em::Value::CZString const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Value::Value(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "std::string::reserve(unsigned long)", referenced from:

      Json_em::Reader::decodeString(Json_em::Reader::Token&, std::string&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::normalizeEOL(std::string const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledStreamWriter::normalizeEOL(std::string const&) in libHyphenateFullSDK.a(jsoncpp.o)

      std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::string::push_back(char)", referenced from:

      Json_em::Reader::decodeString(Json_em::Reader::Token&, std::string&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::writeCommentBeforeValue(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::writeIndent() in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::normalizeEOL(std::string const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledStreamWriter::normalizeEOL(std::string const&) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::__throw_out_of_range(char const*)", referenced from:

      webrtc::RTCPSender::BuildTMMBR(webrtc::ModuleRtpRtcpImpl*, unsigned char*, int&) in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPSender::BuildTMMBN(unsigned char*, int&) in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPReceiver::BoundingSet(bool&, webrtc::TMMBRSet*) in libHyphenateFullSDK.a(rtcp_receiver.o)

      webrtc::RTCPHelp::RTCPReceiveInformation::InsertTMMBRItem(unsigned int, webrtc::RTCPUtility::RTCPPacketRTPFBTMMBRItem const&, long long) in libHyphenateFullSDK.a(rtcp_receiver_help.o)

      webrtc::RTCPHelp::RTCPReceiveInformation::GetTMMBRSet(unsigned int, unsigned int, webrtc::TMMBRSet*, long long) in libHyphenateFullSDK.a(rtcp_receiver_help.o)

      webrtc::RTPPacketHistory::GetPacketAndSetSendTime(unsigned short, unsigned int, bool, unsigned char*, unsigned short*, long long*) in libHyphenateFullSDK.a(rtp_packet_history.o)

      webrtc::RTPPacketHistory::GetBestFittingPacket(unsigned char*, unsigned short*, long long*) in libHyphenateFullSDK.a(rtp_packet_history.o)

      ...

  "std::string::append(std::string const&)", referenced from:

      Json_em::Reader::addComment(char const*, char const*, Json_em::CommentPlacement) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::decodeString(Json_em::Reader::Token&, std::string&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::getFormattedErrorMessages() const in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::FastWriter::writeValue(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::writeValue(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::writeCommentAfterValueOnSameLine(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "std::string::find_last_not_of(char const*, unsigned long, unsigned long) const", referenced from:

      Json_em::Reader::readValue() in libHyphenateFullSDK.a(jsoncpp.o)

  "std::string::resize(unsigned long, char)", referenced from:

      Json_em::Reader::decodeString(Json_em::Reader::Token&, std::string&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::unindent() in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledStreamWriter::unindent() in libHyphenateFullSDK.a(jsoncpp.o)

  "std::string::_M_mutate(unsigned long, unsigned long, unsigned long)", referenced from:

      Json_em::Reader::readValue() in libHyphenateFullSDK.a(jsoncpp.o)

  "std::string::erase(unsigned long, unsigned long)", referenced from:

      Json_em::Reader::readValue() in libHyphenateFullSDK.a(jsoncpp.o)

  "std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char)", referenced from:

      Json_em::Reader::parse(std::istream&, Json_em::Value&, bool) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:

      std::_Rb_tree<void*, std::pair<void* const, webrtc::Config::BaseOption*>, std::_Select1st<std::pair<void* const, webrtc::Config::BaseOption*> >, std::less<void*>, std::allocator<std::pair<void* const, webrtc::Config::BaseOption*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<void* const, webrtc::Config::BaseOption*> >, std::pair<void* const, webrtc::Config::BaseOption*> const&) in libHyphenateFullSDK.a(channel.o)

      std::_Rb_tree<void*, std::pair<void* const, webrtc::Config::BaseOption*>, std::_Select1st<std::pair<void* const, webrtc::Config::BaseOption*> >, std::less<void*>, std::allocator<std::pair<void* const, webrtc::Config::BaseOption*> > >::_M_insert_unique(std::pair<void* const, webrtc::Config::BaseOption*> const&) in libHyphenateFullSDK.a(channel.o)

      Json_em::ValueIteratorBase::decrement() in libHyphenateFullSDK.a(jsoncpp.o)

      std::_Rb_tree<Json_em::Value::CZString, std::pair<Json_em::Value::CZString const, Json_em::Value>, std::_Select1st<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::less<Json_em::Value::CZString>, std::allocator<std::pair<Json_em::Value::CZString const, Json_em::Value> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::pair<Json_em::Value::CZString const, Json_em::Value> const&) in libHyphenateFullSDK.a(jsoncpp.o)

      std::_Rb_tree<Json_em::Value::CZString, std::pair<Json_em::Value::CZString const, Json_em::Value>, std::_Select1st<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::less<Json_em::Value::CZString>, std::allocator<std::pair<Json_em::Value::CZString const, Json_em::Value> > >::_M_insert_unique(std::pair<Json_em::Value::CZString const, Json_em::Value> const&) in libHyphenateFullSDK.a(jsoncpp.o)

      std::_Rb_tree<int, std::pair<int const, webrtc::MixerParticipant*>, std::_Select1st<std::pair<int const, webrtc::MixerParticipant*> >, std::less<int>, std::allocator<std::pair<int const, webrtc::MixerParticipant*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, webrtc::MixerParticipant*> >, std::pair<int const, webrtc::MixerParticipant*> const&) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      std::_Rb_tree<int, std::pair<int const, webrtc::MixerParticipant*>, std::_Select1st<std::pair<int const, webrtc::MixerParticipant*> >, std::less<int>, std::allocator<std::pair<int const, webrtc::MixerParticipant*> > >::_M_insert_unique(std::pair<int const, webrtc::MixerParticipant*> const&) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      ...

  "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from:

      webrtc::LogMessage::~LogMessage() in libHyphenateFullSDK.a(logging.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

  "std::locale::~locale()", referenced from:

      webrtc::LogMessage::~LogMessage() in libHyphenateFullSDK.a(logging.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

  "std::ios_base::ios_base()", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  "vtable for std::basic_ios<char, std::char_traits<char> >", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

  "vtable for std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

  "std::_Rb_tree_increment(std::_Rb_tree_node_base const*)", referenced from:

      Json_em::Value::operator==(Json_em::Value const&) const in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Value::getMemberNames() const in libHyphenateFullSDK.a(jsoncpp.o)

      bool std::lexicographical_compare<std::_Rb_tree_const_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::_Rb_tree_const_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> > >(std::_Rb_tree_const_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::_Rb_tree_const_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::_Rb_tree_const_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::_Rb_tree_const_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::ReceiveStatisticsImpl::GetActiveStatisticians() const in libHyphenateFullSDK.a(receive_statistics_impl.o)

      webrtc::RTPPayloadRegistry::ReceivePayloadType(char const*, unsigned int, unsigned char, unsigned int, signed char*) const in libHyphenateFullSDK.a(rtp_payload_registry.o)

      webrtc::RTCPSender::PrepareRTCP(webrtc::RTCPSender::FeedbackState const&, unsigned int, int, unsigned short const*, bool, unsigned long long, unsigned char*, int) in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPSender::WriteReportBlocksToBuffer(unsigned char*, int, std::map<unsigned int, webrtc::RTCPReportBlock*, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, webrtc::RTCPReportBlock*> > > const&) in libHyphenateFullSDK.a(rtcp_sender.o)

      ...

  "std::ios_base::~ios_base()", referenced from:

      webrtc::LogMessage::~LogMessage() in libHyphenateFullSDK.a(logging.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

  "vtable for std::basic_streambuf<char, std::char_traits<char> >", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::LogMessage::~LogMessage() in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

  "std::locale::locale()", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::FilePlayerImpl::StartPlayingFile(char const*, bool, unsigned int, float, unsigned int, unsigned int, webrtc::CodecInst const*) in libHyphenateFullSDK.a(file_player_impl.o)

      webrtc::RtpReceiverImpl::RegisterReceivePayload(char const*, signed char, unsigned int, unsigned char, unsigned int) in libHyphenateFullSDK.a(rtp_receiver_impl.o)

      webrtc::FileRecorderImpl::StartRecordingAudioFile(char const*, webrtc::CodecInst const&, unsigned int, webrtc::ACMAMRPackingFormat) in libHyphenateFullSDK.a(file_recorder_impl.o)

      webrtc::RTPReceiverAudio::InvokeOnInitializeDecoder(webrtc::RtpFeedback*, int, signed char, char const*, webrtc::PayloadUnion const&) const in libHyphenateFullSDK.a(rtp_receiver_audio.o)

  "_iconv", referenced from:

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "vtable for std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::LogMessage::~LogMessage() in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:

      on_data_recvfrom(pj_activesock_t*, void*, unsigned long, void const*, int, int) in libHyphenateFullSDK.a(eice.o)

      _json_get_string(Json_em::Value&, char const*, std::string const&) in libHyphenateFullSDK.a(eice.o)

      std::vector<eice_addr_pair, std::allocator<eice_addr_pair> >::push_back(eice_addr_pair const&) in libHyphenateFullSDK.a(eice.o)

      std::vector<eice_addr_pair, std::allocator<eice_addr_pair> >::_M_insert_aux(__gnu_cxx::__normal_iterator<eice_addr_pair*, std::vector<eice_addr_pair, std::allocator<eice_addr_pair> > >, eice_addr_pair const&) in libHyphenateFullSDK.a(eice.o)

      eice_addr_pair::eice_addr_pair(std::string const&, int, std::string const&, int, int) in libHyphenateFullSDK.a(eice.o)

      Json_em::Reader::decodeNumber(Json_em::Reader::Token&, Json_em::Value&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::decodeDouble(Json_em::Reader::Token&, Json_em::Value&) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "_sqlite3_column_name", referenced from:

      easemob::Statement::columnIndexMap() in libHyphenateFullSDK.a(sqlite.o)

  "std::ios_base::Init::Init()", referenced from:

      __GLOBAL__sub_I_webrtc_voiceengine.cc in libHyphenateFullSDK.a(webrtc_voiceengine.o)

  "std::string::_Rep::_M_destroy(std::allocator<char> const&)", referenced from:

      confice_free(tag_confice*) in libHyphenateFullSDK.a(eice.o)

      confice_new(Json_em::Value&, pj_ice_strans_cfg*, pj_pool_t*, int, int, std::string&, std::string&, std::string&, std::string&, confice_cb const*, void*, tag_confice**) in libHyphenateFullSDK.a(eice.o)

      on_data_recvfrom(pj_activesock_t*, void*, unsigned long, void const*, int, int) in libHyphenateFullSDK.a(eice.o)

      _eice_new in libHyphenateFullSDK.a(eice.o)

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      _eice_free in libHyphenateFullSDK.a(eice.o)

      _eice_get_nego_result in libHyphenateFullSDK.a(eice.o)

      ...

  "_iconv_open", referenced from:

      _em_avcodec_open2 in libHyphenateFullSDK.a(utils.o)

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_iconv_close", referenced from:

      _em_avcodec_open2 in libHyphenateFullSDK.a(utils.o)

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_compress", referenced from:

      easemob::protocol::CompressionZlib::compress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in libHyphenateFullSDK.a(emcompressionzlib.o)

     (maybe you meant: _lame_get_compression_ratio, _lame_set_compression_ratio , __ZN6webrtc15GainControlImpl23set_compression_gain_dbEi , _OBJC_IVAR_$_EMImageMessageBody._compressionRatio )

  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned long, std::allocator<char> const&)", referenced from:

      _eice_new in libHyphenateFullSDK.a(eice.o)

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      _eice_get_local in libHyphenateFullSDK.a(eice.o)

      _eice_get_nego_result in libHyphenateFullSDK.a(eice.o)

      cand_to_json_value(int, int, pj_ice_sess_cand const*, Json_em::Value&) in libHyphenateFullSDK.a(eice.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  "_inflateEnd", referenced from:

      _http_close in libHyphenateFullSDK.a(http.o)

      _http_read_header in libHyphenateFullSDK.a(http.o)

  "std::__throw_length_error(char const*)", referenced from:

      std::vector<std::string, std::allocator<std::string> >::reserve(unsigned long) in libHyphenateFullSDK.a(jsoncpp.o)

      std::deque<Json_em::Reader::ErrorInfo, std::allocator<Json_em::Reader::ErrorInfo> >::_M_new_elements_at_front(unsigned long) in libHyphenateFullSDK.a(jsoncpp.o)

      std::deque<Json_em::Reader::ErrorInfo, std::allocator<Json_em::Reader::ErrorInfo> >::_M_new_elements_at_back(unsigned long) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::AudioBuffer::AudioBuffer(int, int, int, int, int) in libHyphenateFullSDK.a(audio_buffer.o)

      std::vector<void*, std::allocator<void*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<void**, std::vector<void*, std::allocator<void*> > >, unsigned long, void* const&) in libHyphenateFullSDK.a(processing_component.o)

      std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::vector<unsigned char, std::allocator<unsigned char> >*, std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > >, unsigned long, std::vector<unsigned char, std::allocator<unsigned char> > const&) in libHyphenateFullSDK.a(rtp_packet_history.o)

      std::vector<unsigned short, std::allocator<unsigned short> >::_M_fill_insert(__gnu_cxx::__normal_iterator<unsigned short*, std::vector<unsigned short, std::allocator<unsigned short> > >, unsigned long, unsigned short const&) in libHyphenateFullSDK.a(rtp_packet_history.o)

      ...

  "std::string::append(char const*, unsigned long)", referenced from:

      on_data_recvfrom(pj_activesock_t*, void*, unsigned long, void const*, int, int) in libHyphenateFullSDK.a(eice.o)

      Json_em::Reader::decodeNumber(Json_em::Reader::Token&, Json_em::Value&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::decodeDouble(Json_em::Reader::Token&, Json_em::Value&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::getFormattedErrorMessages() const in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::write(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::FastWriter::write(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "std::string::assign(std::string const&)", referenced from:

      on_data_recvfrom(pj_activesock_t*, void*, unsigned long, void const*, int, int) in libHyphenateFullSDK.a(eice.o)

      _eice_new in libHyphenateFullSDK.a(eice.o)

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      std::vector<eice_addr_pair, std::allocator<eice_addr_pair> >::_M_insert_aux(__gnu_cxx::__normal_iterator<eice_addr_pair*, std::vector<eice_addr_pair, std::allocator<eice_addr_pair> > >, eice_addr_pair const&) in libHyphenateFullSDK.a(eice.o)

      Json_em::Reader::parse(std::string const&, Json_em::Value&, bool) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::parse(std::istream&, Json_em::Value&, bool) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::addError(std::string const&, Json_em::Reader::Token&, char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "std::ostream::operator<<(int)", referenced from:

      webrtc::VoEBaseImpl::Init(webrtc::AudioDeviceModule*, webrtc::AudioProcessing*) in libHyphenateFullSDK.a(voe_base_impl.o)

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::voe::TransmitMixer::ProcessAudio(int, int, int, bool) in libHyphenateFullSDK.a(transmit_mixer.o)

      webrtc::voe::Channel::GetAudioFrame(int, webrtc::AudioFrame&) in libHyphenateFullSDK.a(channel.o)

      webrtc::voe::Channel::Init() in libHyphenateFullSDK.a(channel.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::FilePlayerImpl::Get10msAudioFromFile(short*, int&, int) in libHyphenateFullSDK.a(file_player_impl.o)

      ...

  "std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:

      webrtc::VoiceEngineImpl::~VoiceEngineImpl() in libHyphenateFullSDK.a(voice_engine_impl.o)

      webrtc::AudioProcessing::Create() in libHyphenateFullSDK.a(audio_processing_impl.o)

      webrtc::voe::Channel::Channel(int, unsigned int, webrtc::Config const&, media_callback*, bool) in libHyphenateFullSDK.a(channel.o)

      std::_Rb_tree<void*, std::pair<void* const, webrtc::Config::BaseOption*>, std::_Select1st<std::pair<void* const, webrtc::Config::BaseOption*> >, std::less<void*>, std::allocator<std::pair<void* const, webrtc::Config::BaseOption*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<void* const, webrtc::Config::BaseOption*> >, std::pair<void* const, webrtc::Config::BaseOption*> const&) in libHyphenateFullSDK.a(channel.o)

      Json_em::ValueIteratorBase::increment() in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::ValueIteratorBase::computeDistance(Json_em::ValueIteratorBase const&) const in libHyphenateFullSDK.a(jsoncpp.o)

      std::_Rb_tree<Json_em::Value::CZString, std::pair<Json_em::Value::CZString const, Json_em::Value>, std::_Select1st<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::less<Json_em::Value::CZString>, std::allocator<std::pair<Json_em::Value::CZString const, Json_em::Value> > >::erase(std::_Rb_tree_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::_Rb_tree_iterator<std::pair<Json_em::Value::CZString const, Json_em::Value> >) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "std::ostream& std::ostream::_M_insert<bool>(bool)", referenced from:

      webrtc::VoEBaseImpl::Init(webrtc::AudioDeviceModule*, webrtc::AudioProcessing*) in libHyphenateFullSDK.a(voe_base_impl.o)

  "std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*)", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

  "_inflateInit2_", referenced from:

      _http_read_header in libHyphenateFullSDK.a(http.o)

  "_gzwrite", referenced from:

      easemob::EMFileCompressor::addFileToGZ(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(emfilecompressor.o)

      easemob::EMFileCompressor::write(void const*, unsigned long) in libHyphenateFullSDK.a(emfilecompressor.o)

  "VTT for std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >", referenced from:

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::LogMessage::~LogMessage() in libHyphenateFullSDK.a(logging.o)

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

      webrtc::NACKStringBuilder::NACKStringBuilder() in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:

      confice_new(Json_em::Value&, pj_ice_strans_cfg*, pj_pool_t*, int, int, std::string&, std::string&, std::string&, std::string&, confice_cb const*, void*, tag_confice**) in libHyphenateFullSDK.a(eice.o)

      on_data_recvfrom(pj_activesock_t*, void*, unsigned long, void const*, int, int) in libHyphenateFullSDK.a(eice.o)

      _eice_new in libHyphenateFullSDK.a(eice.o)

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      _eice_get_local in libHyphenateFullSDK.a(eice.o)

      parse_turn_config(eice_st*, Json_em::Value&, stun_bind_cfg&) in libHyphenateFullSDK.a(eice.o)

      _get_pairs_from_result(char const*, int*) in libHyphenateFullSDK.a(eice.o)

      ...

  "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()", referenced from:

      Json_em::valueToQuotedString(char const*) in libHyphenateFullSDK.a(jsoncpp.o)

  "std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:

      std::_Rb_tree<void*, std::pair<void* const, webrtc::Config::BaseOption*>, std::_Select1st<std::pair<void* const, webrtc::Config::BaseOption*> >, std::less<void*>, std::allocator<std::pair<void* const, webrtc::Config::BaseOption*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<void* const, webrtc::Config::BaseOption*> >, std::pair<void* const, webrtc::Config::BaseOption*> const&) in libHyphenateFullSDK.a(channel.o)

      std::_Rb_tree<void*, std::pair<void* const, webrtc::Config::BaseOption*>, std::_Select1st<std::pair<void* const, webrtc::Config::BaseOption*> >, std::less<void*>, std::allocator<std::pair<void* const, webrtc::Config::BaseOption*> > >::_M_insert_unique(std::pair<void* const, webrtc::Config::BaseOption*> const&) in libHyphenateFullSDK.a(channel.o)

      std::_Rb_tree<Json_em::Value::CZString, std::pair<Json_em::Value::CZString const, Json_em::Value>, std::_Select1st<std::pair<Json_em::Value::CZString const, Json_em::Value> >, std::less<Json_em::Value::CZString>, std::allocator<std::pair<Json_em::Value::CZString const, Json_em::Value> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<Json_em::Value::CZString const, Json_em::Value> const&) in libHyphenateFullSDK.a(jsoncpp.o)

      std::_Rb_tree<int, std::pair<int const, webrtc::MixerParticipant*>, std::_Select1st<std::pair<int const, webrtc::MixerParticipant*> >, std::less<int>, std::allocator<std::pair<int const, webrtc::MixerParticipant*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, webrtc::MixerParticipant*> >, std::pair<int const, webrtc::MixerParticipant*> const&) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      std::_Rb_tree<int, std::pair<int const, webrtc::MixerParticipant*>, std::_Select1st<std::pair<int const, webrtc::MixerParticipant*> >, std::less<int>, std::allocator<std::pair<int const, webrtc::MixerParticipant*> > >::_M_insert_unique(std::pair<int const, webrtc::MixerParticipant*> const&) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      webrtc::BitrateControllerImpl::NormalRateAllocation(unsigned int, unsigned char, unsigned int, unsigned int) in libHyphenateFullSDK.a(bitrate_controller_impl.o)

      std::_Rb_tree<unsigned int, std::pair<unsigned int const, unsigned int>, std::_Select1st<std::pair<unsigned int const, unsigned int> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, unsigned int> >, std::pair<unsigned int const, unsigned int> const&) in libHyphenateFullSDK.a(bitrate_controller_impl.o)

      ...

  "_gzopen", referenced from:

      easemob::EMFileCompressor::createGZFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(emfilecompressor.o)

  "std::string::assign(char const*, unsigned long)", referenced from:

      _eice_new in libHyphenateFullSDK.a(eice.o)

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      Json_em::Reader::parse(char const*, char const*, Json_em::Value&, bool) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::readValue() in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::Reader::readObject(Json_em::Reader::Token&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::write(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::FastWriter::write(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      ...

  "_gzclose", referenced from:

      easemob::EMFileCompressor::~EMFileCompressor() in libHyphenateFullSDK.a(emfilecompressor.o)

      easemob::EMFileCompressor::closeGZFile() in libHyphenateFullSDK.a(emfilecompressor.o)

  "std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)", referenced from:

      webrtc::VoEAudioProcessingImpl::SetTypingDetectionStatus(bool) in libHyphenateFullSDK.a(voe_audio_processing_impl.o)

      webrtc::VoEAudioProcessingImpl::TimeSinceLastTyping(int&) in libHyphenateFullSDK.a(voe_audio_processing_impl.o)

      webrtc::VoEAudioProcessingImpl::SetTypingDetectionParameters(int, int, int, int, int) in libHyphenateFullSDK.a(voe_audio_processing_impl.o)

      webrtc::VoEBaseImpl::Init(webrtc::AudioDeviceModule*, webrtc::AudioProcessing*) in libHyphenateFullSDK.a(voe_base_impl.o)

      webrtc::LogMessage::LogMessage(char const*, int, webrtc::LoggingSeverity) in libHyphenateFullSDK.a(logging.o)

      webrtc::AudioProcessingImpl::ProcessStream(webrtc::AudioFrame*) in libHyphenateFullSDK.a(audio_processing_impl.o)

      webrtc::voe::TransmitMixer::ProcessAudio(int, int, int, bool) in libHyphenateFullSDK.a(transmit_mixer.o)

      ...

  "std::string::compare(char const*) const", referenced from:

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      test_expect::check_content(char const*) in libHyphenateFullSDK.a(eice.o)

      Json_em::Value::isConvertibleTo(Json_em::ValueType) const in libHyphenateFullSDK.a(jsoncpp.o)

  "std::_List_node_base::hook(std::_List_node_base*)", referenced from:

      YUVMediaBuffer::pushVideoPackage(char const*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) in libHyphenateFullSDK.a(x264codec.o)

      YUVMediaBuffer::pushAudioPackage(char const*, unsigned int, unsigned int) in libHyphenateFullSDK.a(x264codec.o)

      MediaBuffer::pushVideoPackage(unsigned char const*, unsigned int, unsigned int, unsigned int) in libHyphenateFullSDK.a(mediabuffer.o)

      MediaBuffer::pushAudioPackage(unsigned char const*, unsigned int, unsigned int) in libHyphenateFullSDK.a(mediabuffer.o)

      webrtc::AudioProcessingImpl::AudioProcessingImpl(webrtc::Config const&) in libHyphenateFullSDK.a(audio_processing_impl.o)

      webrtc::ProcessThreadImpl::RegisterModule(webrtc::Module*) in libHyphenateFullSDK.a(process_thread_impl.o)

      webrtc::AudioConferenceMixerImpl::Process() in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      ...

  "std::_List_node_base::unhook()", referenced from:

      YUVMediaBuffer::Reset() in libHyphenateFullSDK.a(x264codec.o)

      YUVMediaBuffer::releaseBuffer(YUVMediaPackage*) in libHyphenateFullSDK.a(x264codec.o)

      MediaBuffer::Reset() in libHyphenateFullSDK.a(mediabuffer.o)

      MediaBuffer::releaseBuffer(MediaPackage*) in libHyphenateFullSDK.a(mediabuffer.o)

      webrtc::AudioProcessingImpl::~AudioProcessingImpl() in libHyphenateFullSDK.a(audio_processing_impl.o)

      webrtc::ProcessThreadImpl::DeRegisterModule(webrtc::Module const*) in libHyphenateFullSDK.a(process_thread_impl.o)

      webrtc::AudioConferenceMixerImpl::UpdateToMix(std::list<webrtc::AudioFrame*, std::allocator<webrtc::AudioFrame*> >*, std::list<webrtc::AudioFrame*, std::allocator<webrtc::AudioFrame*> >*, std::map<int, webrtc::MixerParticipant*, std::less<int>, std::allocator<std::pair<int const, webrtc::MixerParticipant*> > >*, unsigned long&) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      ...

  "std::ios_base::Init::~Init()", referenced from:

      __GLOBAL__sub_I_webrtc_voiceengine.cc in libHyphenateFullSDK.a(webrtc_voiceengine.o)

  "_sqlite3_open_v2", referenced from:

      easemob::Connection::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_errmsg", referenced from:

      easemob::Statement::Bind(int, int) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Statement::Bind(int, long long) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Statement::Bind(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Statement::BindNull(int) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Connection::MakeStmt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_inflate", referenced from:

      _http_read_stream in libHyphenateFullSDK.a(http.o)

  "std::string::_M_leak_hard()", referenced from:

      Json_em::Reader::decodeString(Json_em::Reader::Token&, std::string&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::writeCommentBeforeValue(Json_em::Value const&) in libHyphenateFullSDK.a(jsoncpp.o)

      Json_em::StyledWriter::writeIndent() in libHyphenateFullSDK.a(jsoncpp.o)

  "_sqlite3_open", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

  "_sqlite3_last_insert_rowid", referenced from:

      easemob::Connection::GetLastInsertId() in libHyphenateFullSDK.a(sqlite.o)

  "std::string::_Rep::_S_empty_rep_storage", referenced from:

      confice_free(tag_confice*) in libHyphenateFullSDK.a(eice.o)

      confice_new(Json_em::Value&, pj_ice_strans_cfg*, pj_pool_t*, int, int, std::string&, std::string&, std::string&, std::string&, confice_cb const*, void*, tag_confice**) in libHyphenateFullSDK.a(eice.o)

      on_data_recvfrom(pj_activesock_t*, void*, unsigned long, void const*, int, int) in libHyphenateFullSDK.a(eice.o)

      _eice_new in libHyphenateFullSDK.a(eice.o)

      _parse_remote(eice_st*, char const*, int) in libHyphenateFullSDK.a(eice.o)

      _eice_free in libHyphenateFullSDK.a(eice.o)

      _eice_get_nego_result in libHyphenateFullSDK.a(eice.o)

      ...

  "_sqlite3_column_text", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Column::GetText() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator char const*() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >() const in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_column_int64", referenced from:

      easemob::Column::GetInt64() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator long long() const in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_int64", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::Bind(int, long long) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_prepare_v2", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Connection::MakeStmt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_initialize", referenced from:

      easemob::Connection::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_int", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::Bind(int, int) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_exec", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

  "_sqlite3_finalize", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Statement::~Statement() in libHyphenateFullSDK.a(sqlite.o)

      easemob::Connection::MakeStmt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_text", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::Bind(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_null", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::BindNull(int) in libHyphenateFullSDK.a(sqlite.o)

  "std::_List_node_base::transfer(std::_List_node_base*, std::_List_node_base*)", referenced from:

      webrtc::AudioConferenceMixerImpl::GetAdditionalAudio(std::list<webrtc::AudioFrame*, std::allocator<webrtc::AudioFrame*> >*) in libHyphenateFullSDK.a(audio_conference_mixer_impl.o)

      void std::list<webrtc::DtmfEvent, std::allocator<webrtc::DtmfEvent> >::sort<bool (*)(webrtc::DtmfEvent const&, webrtc::DtmfEvent const&)>(bool (*)(webrtc::DtmfEvent const&, webrtc::DtmfEvent const&)) in libHyphenateFullSDK.a(dtmf_buffer.o)

      webrtc::PayloadSplitter::SplitRed(std::list<webrtc::Packet*, std::allocator<webrtc::Packet*> >*) in libHyphenateFullSDK.a(payload_splitter.o)

      webrtc::PayloadSplitter::SplitAudio(std::list<webrtc::Packet*, std::allocator<webrtc::Packet*> >*, webrtc::DecoderDatabase const&) in libHyphenateFullSDK.a(payload_splitter.o)

  "_sqlite3_step", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Statement::Step() in libHyphenateFullSDK.a(sqlite.o)

      easemob::Connection::StepSql(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "std::ostream& std::ostream::_M_insert<unsigned long>(unsigned long)", referenced from:

      webrtc::ModuleRtpRtcpImpl::SetMaxTransferUnit(unsigned short) in libHyphenateFullSDK.a(rtp_rtcp_impl.o)

      webrtc::NACKStringBuilder::PushNACK(unsigned short) in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPSender::BuildNACK(unsigned char*, int&, int, unsigned short const*, std::string*) in libHyphenateFullSDK.a(rtcp_sender.o)

      webrtc::RTCPReceiver::ResetRTT(unsigned int) in libHyphenateFullSDK.a(rtcp_receiver.o)

      webrtc::RTCPReceiver::HandleReportBlock(webrtc::RTCPUtility::RTCPPacket const&, webrtc::RTCPHelp::RTCPPacketInformation&, unsigned int, unsigned char) in libHyphenateFullSDK.a(rtcp_receiver.o)

      webrtc::SendSideBandwidthEstimation::CapBitrateToThresholds() in libHyphenateFullSDK.a(send_side_bandwidth_estimation.o)

      webrtc::RTPSender::SetMaxPayloadLength(unsigned short, unsigned short) in libHyphenateFullSDK.a(rtp_sender.o)

      ...

  "_sqlite3_bind_double", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

  "_sqlite3_column_double", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

  "_sqlite3_column_int", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Column::GetInt() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator int() const in libHyphenateFullSDK.a(sqlite.o)

  "_uncompress", referenced from:

      easemob::protocol::CompressionZlib::decompress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in libHyphenateFullSDK.a(emcompressionzlib.o)

      _id3v2_read_internal in libHyphenateFullSDK.a(id3v2.o)

      _mov_read_cmov in libHyphenateFullSDK.a(mov.o)

  "_sqlite3_column_count", referenced from:

      easemob::Statement::columnIndexMap() in libHyphenateFullSDK.a(sqlite.o)

  "_zlibCompileFlags", referenced from:

      _http_read_header in libHyphenateFullSDK.a(http.o)

  "_sqlite3_close", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Connection::~Connection() in libHyphenateFullSDK.a(sqlite.o)

ld: symbol(s) not found for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

Showing first 200 notices only


经过查找是没有找到C++的依赖库

解决方法:导入系统框架libstdc++.6.0.9.tbd


之后再次编译,错误如下:

Undefined symbols for architecture arm64:

  "_inflate", referenced from:

      _http_read_stream in libHyphenateFullSDK.a(http.o)

  "_zlibCompileFlags", referenced from:

      _http_read_header in libHyphenateFullSDK.a(http.o)

  "_inflateEnd", referenced from:

      _http_close in libHyphenateFullSDK.a(http.o)

      _http_read_header in libHyphenateFullSDK.a(http.o)

  "_uncompress", referenced from:

      easemob::protocol::CompressionZlib::decompress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in libHyphenateFullSDK.a(emcompressionzlib.o)

      _id3v2_read_internal in libHyphenateFullSDK.a(id3v2.o)

      _mov_read_cmov in libHyphenateFullSDK.a(mov.o)

  "_iconv", referenced from:

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_iconv_open", referenced from:

      _em_avcodec_open2 in libHyphenateFullSDK.a(utils.o)

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_iconv_close", referenced from:

      _em_avcodec_open2 in libHyphenateFullSDK.a(utils.o)

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_gzwrite", referenced from:

      easemob::EMFileCompressor::addFileToGZ(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(emfilecompressor.o)

      easemob::EMFileCompressor::write(void const*, unsigned long) in libHyphenateFullSDK.a(emfilecompressor.o)

  "_gzclose", referenced from:

      easemob::EMFileCompressor::~EMFileCompressor() in libHyphenateFullSDK.a(emfilecompressor.o)

      easemob::EMFileCompressor::closeGZFile() in libHyphenateFullSDK.a(emfilecompressor.o)

  "_sqlite3_open_v2", referenced from:

      easemob::Connection::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_errmsg", referenced from:

      easemob::Statement::Bind(int, int) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Statement::Bind(int, long long) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Statement::Bind(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Statement::BindNull(int) in libHyphenateFullSDK.a(sqlite.o)

      easemob::Connection::MakeStmt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_compress", referenced from:

      easemob::protocol::CompressionZlib::compress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in libHyphenateFullSDK.a(emcompressionzlib.o)

     (maybe you meant: _lame_get_compression_ratio, _lame_set_compression_ratio , __ZN6webrtc15GainControlImpl23set_compression_gain_dbEi , _OBJC_IVAR_$_EMImageMessageBody._compressionRatio )

  "_sqlite3_open", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

  "_sqlite3_last_insert_rowid", referenced from:

      easemob::Connection::GetLastInsertId() in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_column_int64", referenced from:

      easemob::Column::GetInt64() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator long long() const in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_int64", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::Bind(int, long long) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_prepare_v2", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Connection::MakeStmt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_initialize", referenced from:

      easemob::Connection::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_int", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::Bind(int, int) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_column_name", referenced from:

      easemob::Statement::columnIndexMap() in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_finalize", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Statement::~Statement() in libHyphenateFullSDK.a(sqlite.o)

      easemob::Connection::MakeStmt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_column_text", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Column::GetText() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator char const*() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >() const in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_text", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::Bind(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_bind_null", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

      easemob::Statement::BindNull(int) in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_exec", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

  "_sqlite3_step", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Statement::Step() in libHyphenateFullSDK.a(sqlite.o)

      easemob::Connection::StepSql(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<easemob::EMAttributeValue, std::__1::allocator<easemob::EMAttributeValue> > const&) in libHyphenateFullSDK.a(sqlite.o)

  "_gzopen", referenced from:

      easemob::EMFileCompressor::createGZFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libHyphenateFullSDK.a(emfilecompressor.o)

  "_sqlite3_bind_double", referenced from:

      easemob::EMAttributeValue::bind(void*, int) in libHyphenateFullSDK.a(emattributevalue.o)

  "_sqlite3_column_double", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

  "_inflateInit2_", referenced from:

      _http_read_header in libHyphenateFullSDK.a(http.o)

  "_sqlite3_column_int", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Column::GetInt() const in libHyphenateFullSDK.a(sqlite.o)

      easemob::Column::operator int() const in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_column_count", referenced from:

      easemob::Statement::columnIndexMap() in libHyphenateFullSDK.a(sqlite.o)

  "_sqlite3_close", referenced from:

      -[EMClient migrateDatabaseToLatestSDK] in libHyphenateFullSDK.a(EMClient.o)

      easemob::Connection::~Connection() in libHyphenateFullSDK.a(sqlite.o)

ld: symbol(s) not found for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)


解决方法:导入系统框架 libz.1.2.8.tbd 和 libsqlite3.tbd 


再次编译,错误如下:

Undefined symbols for architecture arm64:

  "_iconv", referenced from:

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_iconv_open", referenced from:

      _em_avcodec_open2 in libHyphenateFullSDK.a(utils.o)

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

  "_iconv_close", referenced from:

      _em_avcodec_open2 in libHyphenateFullSDK.a(utils.o)

      _em_avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

ld: symbol(s) not found for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)


解决方法:导入系统框架 libiconv.tbd


大功告成了!



<think>好的,我现在要回答用户关于C++std::find_if和.base()的用法及关系的问题。首先,我需要回忆这两个函数的作用和常见用法。 std::find_if是标准库中的一个算法,用于在范围内查找第一个满足条件的元素。它的基本用法是传入起始和结束迭代器,以及一个谓词(返回bool的可调用对象)。当找到满足条件的元素时,返回指向该元素的迭代器;否则返回结束迭代器。 接下来是.base()方法。我记得这个方法通常与反向迭代器(reverse_iterator)相关联。反向迭代器用于逆向遍历容器,但它们的内部实际上指向原始容器中的下一个元素。例如,一个反向迭代器r_it指向容器中的元素3,实际上它内部保存的是指向元素4的正向迭代器,但通过operator*会返回3。这时候,使用r_it.base()会得到对应的正向迭代器,指向元素4。因此,当需要将反向迭代器转换为正向迭代器时,可能需要使用.base()方法,尤其是在进行插入或删除操作时。 现在,用户询问的是std::find_if返回值和.base()的使用场景。可能的场景是,当使用std::find_if在反向迭代器范围内查找元素时,返回的是一个反向迭代器。此时如果需要对该位置进行某些操作(比如修改元素,或者与其他需要正向迭代器的算法配合使用),就需要将反向迭代器转换为正向迭代器,这时候就需要调用.base()方法。 接下来,我需要验证这些记忆是否正确。例如,假设有一个vector<int> v,使用反向迭代器查找某个元素,找到后通过.base()得到对应的正向迭代器,然后进行插入操作。例如,在C++中,插入操作是在指定位置之前插入,所以如果反向迭代器r_it找到的位置对应的正向迭代器是it,那么插入到it的位置之前,也就是原来r_it所指向的位置之后。 另外,需要注意反向迭代器和.base()返回的正向迭代器之间的对应关系。例如,r_it指向的元素实际上是*(r_it)等价于*(r_it.base() - 1)。因此,当需要插入到r_it所指向的位置之后,应该使用r_it.base()作为插入位置。 接下来,我需要考虑如何将这些内容用中文清晰地表达出来,并给出示例代码。例如,当使用std::find_if在反向迭代器范围内查找元素时,返回的是反向迭代器,使用.base()可以转换为正向迭代器,以便进行其他操作。示例中可能需要包含一个使用反向迭代器查找,然后转换并使用.base()的情况。 此外,还需要注意引用用户提供的参考内容。例如,引用[2]提到了std::equal_range,这可能与范围查找有关,但当前问题不涉及,所以可能不需要引用。引用[4]提到了谓词函数,这与std::find_if的使用相关,因为std::find_if需要传递一个谓词,所以在回答中可以提到谓词的定义,并引用[4]中的内容。 现在,总结回答的结构: 1. 解释std::find_if的作用、参数、返回值。 2. 解释.base()的用途,特别是在反向迭代器中的应用。 3. 结合示例代码说明两者如何配合使用。 4. 提及注意事项,比如迭代器转换后的位置关系。 5. 引用相关的参考资料,比如谓词的定义引用[4]。 最后,确保回答符合用户的要求:结构清晰,分步骤说明,示例正确,引用正确,以及生成相关问题。</think>### C++std::find_if与.base()的用法及关系解析 #### 1. **std::find_if 的核心作用** `std::find_if` 是C++标准库中的一种查找算法,用于在给定范围内查找**第一个满足谓词条件**的元素。其函数原型为: ```cpp template< class InputIt, class UnaryPredicate > InputIt find_if(InputIt first, InputIt last, UnaryPredicate p); ``` - **参数**:`first`和`last`定义搜索范围,`p`是返回布尔值的谓词函数。 - **返回值**:找到元素时返回指向它的迭代器,否则返回`last`[^4]。 #### 2. **.base() 的用途** `.base()` 方法主要用于**反向迭代器(reverse_iterator)与正向迭代器的转换**。反向迭代器内部通过适配正向迭代器实现逆向遍历,例如: - 反向迭代器 `r_it` 指向元素3时,其内部实际保存的是指向元素4的正向迭代器。 - `r_it.base()` 返回对应的正向迭代器,指向原始容器中 `r_it` 的下一个位置[^2]。 #### 3. **结合使用场景** 当使用反向迭代器范围调用 `std::find_if` 时,返回的是反向迭代器。若需对原始容器进行修改(如插入、删除),需将其转换为正向迭代器。 **示例代码**: ```cpp #include <algorithm> #include <vector> #include <iostream> int main() { std::vector<int> v = {1, 3, 5, 7, 9}; // 反向查找第一个偶数 auto r_it = std::find_if(v.rbegin(), v.rend(), [](int x) { return x % 2 == 0; }); if (r_it != v.rend()) { // 转换为正向迭代器,并插入新元素 auto pos = r_it.base(); // 指向原位置的下一个元素 v.insert(pos, 6); // 在r_it对应元素后插入6 } for (int x : v) std::cout << x << " "; // 输出:1 3 5 6 7 9 return 0; } ``` #### 4. **注意事项** - **位置关系**:反向迭代器 `r_it` 和 `.base()` 返回的迭代器 `pos` 满足 `&*r_it == &*(pos - 1)`。 - **插入逻辑**:插入操作 `v.insert(pos, value)` 会将值添加到 `pos` 前,因此反向迭代器的 `.base()` 常用于在找到元素的后方插入。 #### 5. **与谓词的关系** `std::find_if` 的谓词函数需符合 `bool pred(const Type &a)` 形式。例如,示例中使用的Lambda表达式 `[](int x) { return x % 2 == 0; }` 即为一个谓词。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值