我有構建webRTC和我的應用程序通過另一個靜態庫即通過另一個靜態庫訪問WebRTC API。 LibB 當我和我的應用程序鏈接LibB並構建它,它失敗與下面的日誌: ****我建立的WebRTC針對AMD64/**的ARMv7架構爲arm64 未定義的符號:WebRTC與iOS應用程序集成
Undefined symbols for architecture arm64:
"webrtc::FIRFilterNEON::FIRFilterNEON(float const*, unsigned long, unsigned long)", referenced from:
webrtc::FIRFilter::Create(float const*, unsigned long, unsigned long) in LibB.a(fir_filter.o)
"vtable for webrtc::DenoiserFilterNEON", referenced from:
webrtc::DenoiserFilterNEON::DenoiserFilterNEON() in LibB.a(denoiser_filter.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"webrtc::SincResampler::Convolve_NEON(float const*, float const*, float const*, double)", referenced from:
webrtc::SincResampler::Resample(unsigned long, float*) in LibB.a(sinc_resampler.o)
"_WebRtcNsx_NoiseEstimationNeon", referenced from:
l008 in LibB.a(nsx_core.o)
"_SHA1_Final", referenced from:
_sctp_sha1_final in LibB.a(sctp_sha1.o)
"_EVP_MD_CTX_copy", referenced from:
_hmac_start in LibB.a(hmac_ossl.o)
"_EVP_DigestInit", referenced from:
l002 in LibB.a(hmac_ossl.o)
"_EVP_EncryptUpdate", referenced from:
_aes_icm_openssl_encrypt in LibB.a(aes_icm_ossl.o)
"_EVP_EncryptFinal_ex", referenced from:
_aes_icm_openssl_encrypt in LibB.a(aes_icm_ossl.o)
"_EVP_aes_256_ctr", referenced from:
_aes_icm_openssl_set_iv in LibB.a(aes_icm_ossl.o)
"_EVP_aes_128_ctr", referenced from:
_aes_icm_openssl_set_iv in LibB.a(aes_icm_ossl.o)
"_EVP_EncryptInit_ex", referenced from:
_aes_icm_openssl_set_iv in LibB.a(aes_icm_ossl.o)
"_EVP_aes_256_gcm", referenced from:
_aes_gcm_openssl_set_iv in LibB.a(aes_gcm_ossl.o)
"_EVP_DigestFinal", referenced from:
l004 in LibB.a(hmac_ossl.o)
"_EVP_aes_128_gcm", referenced from:
_aes_gcm_openssl_set_iv in LibB.a(aes_gcm_ossl.o)
"_EVP_CIPHER_CTX_cleanup", referenced from:
_aes_gcm_openssl_dealloc in LibB.a(aes_gcm_ossl.o)
_aes_gcm_openssl_context_init in LibB.a(aes_gcm_ossl.o)
_aes_icm_openssl_dealloc in LibB.a(aes_icm_ossl.o)
_aes_icm_openssl_context_init in LibB.a(aes_icm_ossl.o)
"_EVP_CIPHER_CTX_init", referenced from:
_aes_gcm_openssl_alloc in LibB.a(aes_gcm_ossl.o)
_aes_icm_openssl_alloc in LibB.a(aes_icm_ossl.o)
"google::protobuf::internal::WireFormatLite::WriteBytes(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, google::protobuf::io::CodedOutputStream*)", referenced from:
webrtc::audioproc::ReverseStream::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(debug.pb.o)
webrtc::audioproc::Stream::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(debug.pb.o)
"google::protobuf::io::CodedInputStream::PopLimit(int)", referenced from:
bool google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<unsigned int, (google::protobuf::internal::WireFormatLite::FieldType)13>(google::protobuf::io::CodedInputStream*, google::protobuf::RepeatedField<unsigned int>*) in LibB.a(rtc_event_log.pb.o)
"google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, google::protobuf::io::CodedOutputStream*)", referenced from:
webrtc::rtclog::DecoderConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpHeaderExtension::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::EncoderConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::audioproc::Config::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(debug.pb.o)
"google::protobuf::internal::WireFormatLite::WriteInt32(int, int, google::protobuf::io::CodedOutputStream*)", referenced from:
webrtc::rtclog::BwePacketLossEvent::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::DecoderConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpHeaderExtension::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtxConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtxMap::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoSendConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::EncoderConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::internal::WireFormatLite::WriteUInt32(int, unsigned int, google::protobuf::io::CodedOutputStream*)", referenced from:
webrtc::rtclog::RtpPacket::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioPlayoutEvent::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::BwePacketLossEvent::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoReceiveConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtxConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoSendConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioReceiveConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::internal::WireFormatLite::ReadBytes(google::protobuf::io::CodedInputStream*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)", referenced from:
webrtc::rtclog::RtpPacket::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) in LibB.a(rtc_event_log.pb.o)
webrtc::audioproc::ReverseStream::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(debug.pb.o)
webrtc::audioproc::Stream::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(debug.pb.o)
"google::protobuf::MessageLite::InitializationErrorString() const", referenced from:
vtable for webrtc::rtclog::EventStream in LibB.a(rtc_event_log.pb.o)
vtable for webrtc::rtclog::Event in LibB.a(rtc_event_log.pb.o)
vtable for webrtc::rtclog::RtpPacket in LibB.a(rtc_event_log.pb.o)
vtable for webrtc::rtclog::RtcpPacket in LibB.a(rtc_event_log.pb.o)
vtable for webrtc::rtclog::AudioPlayoutEvent in LibB.a(rtc_event_log.pb.o)
vtable for webrtc::rtclog::BwePacketLossEvent in LibB.a(rtc_event_log.pb.o)
vtable for webrtc::rtclog::VideoReceiveConfig in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::internal::ArenaStringPtr::AssignWithDefault(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*, google::protobuf::internal::ArenaStringPtr)", referenced from:
webrtc::rtclog::RtpPacket::MergeFrom(webrtc::rtclog::RtpPacket const&) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::MergeFrom(webrtc::rtclog::RtcpPacket const&) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::DecoderConfig::MergeFrom(webrtc::rtclog::DecoderConfig const&) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpHeaderExtension::MergeFrom(webrtc::rtclog::RtpHeaderExtension const&) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::EncoderConfig::MergeFrom(webrtc::rtclog::EncoderConfig const&) in LibB.a(rtc_event_log.pb.o)
webrtc::audioproc::ReverseStream::MergeFrom(webrtc::audioproc::ReverseStream const&) in LibB.a(debug.pb.o)
webrtc::audioproc::Stream::MergeFrom(webrtc::audioproc::Stream const&) in LibB.a(debug.pb.o)
...
"google::protobuf::internal::WireFormatLite::WriteInt64(int, long long, google::protobuf::io::CodedOutputStream*)", referenced from:
webrtc::rtclog::Event::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
"google::protobuf::io::CodedInputStream::DecrementRecursionDepthAndPopLimit(int)", referenced from:
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::RtpPacket>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::RtpPacket*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::RtcpPacket>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::RtcpPacket*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::AudioPlayoutEvent>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::AudioPlayoutEvent*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::BwePacketLossEvent>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::BwePacketLossEvent*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::VideoReceiveConfig>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::VideoReceiveConfig*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::VideoSendConfig>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::VideoSendConfig*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual<webrtc::rtclog::AudioReceiveConfig>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::AudioReceiveConfig*) in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::io::CodedInputStream::PushLimit(int)", referenced from:
bool google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<unsigned int, (google::protobuf::internal::WireFormatLite::FieldType)13>(google::protobuf::io::CodedInputStream*, google::protobuf::RepeatedField<unsigned int>*) in LibB.a(rtc_event_log.pb.o)
"google::protobuf::io::CodedOutputStream::VarintSize64(unsigned long long)", referenced from:
google::protobuf::internal::WireFormatLite::Int64Size(long long) in LibB.a(rtc_event_log.pb.o)
"google::protobuf::io::CodedOutputStream::WriteVarint32SlowPath(unsigned int)", referenced from:
google::protobuf::io::CodedOutputStream::WriteVarint32(unsigned int) in LibB.a(rtc_event_log.pb.o)
"google::protobuf::internal::ArenaStringPtr::MutableNoArena(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*)", referenced from:
webrtc::rtclog::EventStream::mutable_unknown_fields() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::Event::mutable_unknown_fields() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpPacket::mutable_header() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpPacket::mutable_unknown_fields() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::mutable_packet_data() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::mutable_unknown_fields() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioPlayoutEvent::mutable_unknown_fields() in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::io::CodedOutputStream::WriteRaw(void const*, int)", referenced from:
webrtc::rtclog::EventStream::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::Event::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpPacket::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioPlayoutEvent::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::BwePacketLossEvent::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoReceiveConfig::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::io::CodedInputStream::ReadLengthAndPushLimit()", referenced from:
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::Event>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::Event*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::RtxMap>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::RtxMap*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::RtpHeaderExtension>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::RtpHeaderExtension*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::DecoderConfig>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::DecoderConfig*) in LibB.a(rtc_event_log.pb.o)
"google::protobuf::internal::LogMessage::operator<<(int)", referenced from:
l003 in LibB.a(rtc_event_log.pb.o)
l003 in LibB.a(debug.pb.o)
"google::protobuf::io::CodedInputStream::CheckEntireMessageConsumedAndPopLimit(int)", referenced from:
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::Event>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::Event*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::RtxMap>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::RtxMap*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::RtpHeaderExtension>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::RtpHeaderExtension*) in LibB.a(rtc_event_log.pb.o)
bool google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth<webrtc::rtclog::DecoderConfig>(google::protobuf::io::CodedInputStream*, webrtc::rtclog::DecoderConfig*) in LibB.a(rtc_event_log.pb.o)
"google::protobuf::io::CodedOutputStream::CodedOutputStream(google::protobuf::io::ZeroCopyOutputStream*, bool)", referenced from:
webrtc::rtclog::EventStream::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::Event::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpPacket::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioPlayoutEvent::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::BwePacketLossEvent::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoReceiveConfig::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
...
"google::protobuf::internal::ArenaStringPtr::DestroyNoArena(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*)", referenced from:
webrtc::rtclog::EventStream::SharedDtor() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::Event::SharedDtor() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpPacket::SharedDtor() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::SharedDtor() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioPlayoutEvent::SharedDtor() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::BwePacketLossEvent::SharedDtor() in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoReceiveConfig::SharedDtor() in LibB.a(rtc_event_log.pb.o)
...
"_SHA1_Init", referenced from:
_sctp_sha1_init in LibB.a(sctp_sha1.o)
"vtable for google::protobuf::MessageLite", referenced from:
google::protobuf::MessageLite::MessageLite() in LibB.a(rtc_event_log.pb.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"google::protobuf::GoogleOnceInit(long*, void (*)())", referenced from:
webrtc::rtclog::protobuf_AddDesc_rtc_5fevent_5flog_2eproto() in LibB.a(rtc_event_log.pb.o)
webrtc::audioproc::protobuf_AddDesc_debug_2eproto() in LibB.a(debug.pb.o)
"google::protobuf::internal::OnShutdown(void (*)())", referenced from:
webrtc::rtclog::protobuf_AddDesc_rtc_5fevent_5flog_2eproto_impl() in LibB.a(rtc_event_log.pb.o)
webrtc::audioproc::protobuf_AddDesc_debug_2eproto_impl() in LibB.a(debug.pb.o)
"google::protobuf::MessageLite::SerializeAsString() const", referenced from:
webrtc::AudioProcessingImpl::WriteConfigMessage(bool) in LibB.a(audio_processing_impl.o)
"google::protobuf::io::CodedOutputStream::VarintSize32Fallback(unsigned int)", referenced from:
google::protobuf::io::CodedOutputStream::VarintSize32(unsigned int) in LibB.a(rtc_event_log.pb.o)
"_WebRtcSpl_CrossCorrelationNeon", referenced from:
l004 in LibB.a(spl_init.o)
"google::protobuf::internal::WireFormatLite::SkipField(google::protobuf::io::CodedInputStream*, unsigned int, google::protobuf::io::CodedOutputStream*)", referenced from:
webrtc::rtclog::EventStream::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::Event::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtpPacket::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::RtcpPacket::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::AudioPlayoutEvent::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::BwePacketLossEvent::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
webrtc::rtclog::VideoReceiveConfig::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) in LibB.a(rtc_event_log.pb.o)
...
"_X509_set_pubkey", referenced from:
l004 in LibB.a(opensslidentity.o)
"_WebRtcSpl_MinValueW16Neon", referenced from:
l004 in LibB.a(spl_init.o)
我在解決這一..any幫助新來的WebRTC,並花更多的時間會非常理解
感謝
請檢查它是否需要像音頻,視頻播放器和GLkit框架工作avfoundation框架也 –