Hi ARM,
I'm trying to run armnn on raspberry pi 3.
Building Caffe on pi3 was failed due to lack of memory so I tried to build armnn on my ubuntu host machine.
Host info
4.13.0-32-generic #35~16.04.1-Ubuntu SMP x86_64
I referred to
https://developer.arm.com/technologies/machine-learning-on-arm/developer-material/how-to-guides/configuring-the-arm-nn-sdk-build-environment-for-caffe/building-the-environment
#9
#2.
What I've done is
- built boost for arm in /home/ryan/Desktop/rasp3
- built protobuf for x86-64 and arm in /home/ryan/Desktop/rasp3
- built Caffe on my host
- failed to build armnn with this configuration
export CXX=arm-linux-gnueabihf-g++
export CC=arm-linux-gnueabihf-gcc
cmake -DARMCOMPUTENEON=1 -DPROTOBUF_LIBRARY_DEBUG=/home/ryan/Desktop/rasp3/lib -DPROTOBUF_LIBRARY_RELEASE=/home/ryan/Desktop/rasp3/lib -DARMCOMPUTE_ROOT=/home/ryan/Desktop/AI/ComputeLibrary -DARMCOMPUTE_BUILD_DIR=/home/ryan/Desktop/AI/ComputeLibrary/build -DBOOST_ROOT=/home/ryan/Desktop/rasp3 -DCAFFE_GENERATED_SOURCES=/home/ryan/Desktop/AI/Caffe/build/src -DBUILD_CAFFE_PARSER=1 ..
I got these errors.
_libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::RegisterAllTypes(google::protobuf::Metadata const*, int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::Refresh()'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::WriteUInt32(int, unsigned int, google::protobuf::io::CodedOutputStream*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, unsigned char*)'
libarmnn.so: undefined reference to pthread_rwlock_unlock' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteEnum(int, int, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::ArenaImpl::AllocateAlignedAndAddCleanup(unsigned int, void (*)(void*))' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::ReadVarintSizeAsIntFallback()' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteInt32(int, int, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::Message::CheckTypeAndMergeFrom(google::protobuf::MessageLite const&)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::ReadVarint64Fallback()'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::ReadTagFallback(unsigned int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::UInt32Size(google::protobuf::RepeatedField const&)'
libarmnn.so: undefined reference to pthread_mutexattr_destroy' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::fixed_address_empty_string[abi:cxx11]'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::ReadBytes(google::protobuf::io::CodedInputStream*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)' libarmnn.so: undefined reference to
pthread_create'
libarmnnCaffeParser.so: undefined reference to google::protobuf::Message::GetTypeName[abi:cxx11]() const' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedOutputStream::WriteVarint32SlowPath(unsigned int)'
libarmnnCaffeParser.so: undefined reference to vtable for google::protobuf::io::FileInputStream' libarmnnCaffeParser.so: undefined reference to
google::protobuf::Message::InitializationErrorStringabi:cxx11 const'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::WriteFloat(int, float, google::protobuf::io::CodedOutputStream*)' libarmnn.so: undefined reference to
pthread_key_create'
libarmnn.so: undefined reference to pthread_rwlock_init' libarmnnCaffeParser.so: undefined reference to
google::protobuf::MessageLite::ParseFromCodedStream(google::protobuf::io::CodedInputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormat::SerializeUnknownFields(google::protobuf::UnknownFieldSet const&, google::protobuf::io::CodedOutputStream*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::Message::DiscardUnknownFields()'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::BytesUntilLimit() const' libarmnn.so: undefined reference to
pthread_getspecific'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::BytesUntilTotalBytesLimit() const' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::FileInputStream::CopyingFileInputStream::~CopyingFileInputStream()'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::ReadLittleEndian32Fallback(unsigned int*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteBool(int, bool, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::MessageLite::SerializeWithCachedSizesToArray(unsigned char*) const' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(int, google::protobuf::MessageLite const&, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::RepeatedPtrFieldBase::Reserve(int)' libarmnn.so: undefined reference to
pthread_mutex_trylock'
libarmnn.so: undefined reference to pthread_key_delete' libarmnn.so: undefined reference to
pthread_rwlock_rdlock'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::OnShutdownDestroyMessage(void const*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteInt64(int, long long, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::Arena::OnArenaAllocation(std::type_info const*, unsigned int) const' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteFloatArray(float const*, int, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::DescriptorPool::InternalAddGeneratedFile(void const*, int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::ReflectionOps::Merge(google::protobuf::Message const&, google::protobuf::Message*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::TextFormat::ParseFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, google::protobuf::Message*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CopyingInputStreamAdaptor::~CopyingInputStreamAdaptor()'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::SetTotalBytesLimit(int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::TextFormat::Parse(google::protobuf::io::ZeroCopyInputStream*, google::protobuf::Message*)'
libarmnnCaffeParser.so: undefined reference to typeinfo for google::protobuf::Message' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::OnShutdownDestroyString(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::InitSCCImpl(google::protobuf::internal::SCCInfoBase*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormatLite::WriteString(int, std::_cxx11::basic_string<char, std::char_traits, std::allocator > const&, google::protobuf::io::CodedOutputStream*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::VerifyVersion(int, int, char const*)' libarmnn.so: undefined reference to
pthread_rwlock_destroy'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::WriteDoubleArray(double const*, int, google::protobuf::io::CodedOutputStream*)' libarmnn.so: undefined reference to
pthread_rwlock_wrlock'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::Int32Size(google::protobuf::RepeatedField<int> const&)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::ArenaImpl::AllocateAligned(unsigned int)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::PushLimit(int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::UnknownFieldSet::MergeFrom(google::protobuf::UnknownFieldSet const&)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::AssignDescriptors(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, google::protobuf::internal::MigrationSchema const*, google::protobuf::Message const* const*, unsigned int const*, google::protobuf::Metadata*, google::protobuf::EnumDescriptor const**, google::protobuf::ServiceDescriptor const**)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedOutputStream::WriteVarint64SlowPath(unsigned long long)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::ReadRaw(void*, int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::UnknownFieldSet::ClearFallback()'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::~CodedInputStream()' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::IncrementRecursionDepthAndPushLimit(int)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(google::protobuf::UnknownFieldSet const&, unsigned char*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(google::protobuf::UnknownFieldSet const&)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::Message::SpaceUsedLong() const' libarmnnCaffeParser.so: undefined reference to
google::protobuf::UnknownFieldSet::AddVarint(int, unsigned long long)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::FileInputStream::FileInputStream(int, int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::ReadVarint32Fallback(unsigned int)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::Int64Size(google::protobuf::RepeatedField<long long> const&)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::PopLimit(int)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::RepeatedPtrFieldBase::InternalExtend(int)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormat::SkipField(google::protobuf::io::CodedInputStream*, unsigned int, google::protobuf::UnknownFieldSet*)'
libarmnn.so: undefined reference to pthread_mutexattr_settype' libarmnnCaffeParser.so: undefined reference to
google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void ()(std::_cxx11::basic_string<char, std::char_traits, std::allocator > const&))'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::SkipFallback(int, int)' libarmnn.so: undefined reference to
pthread_join'
libarmnnCaffeParser.so: undefined reference to google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, google::protobuf::io::CodedOutputStream*)' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::DecrementRecursionDepthAndPopLimit(int)'
libarmnn.so: undefined reference to pthread_setspecific' libarmnnCaffeParser.so: undefined reference to
google::protobuf::io::CodedInputStream::default_recursion_limit'
libarmnn.so: undefined reference to pthread_detach' libarmnnCaffeParser.so: undefined reference to
google::protobuf::internal::WireFormat::ReadPackedEnumPreserveUnknowns(google::protobuf::io::CodedInputStream, unsigned int, bool ()(int), google::protobuf::UnknownFieldSet, google::protobuf::RepeatedField*)'
libarmnnCaffeParser.so: undefined reference to google::protobuf::io::CodedInputStream::ReadLittleEndian64Fallback(unsigned long long*)' libarmnn.so: undefined reference to
pthread_mutexattr_init'
collect2: error: ld returned 1 exit status
CMakeFiles/UnitTests.dir/build.make:755: recipe for target 'UnitTests' failed
make[2]: *** [UnitTests] Error 1
make[2]: Target 'CMakeFiles/UnitTests.dir/build' not remade because of errors.
CMakeFiles/Makefile2:144: recipe for target 'CMakeFiles/UnitTests.dir/all' failed
make[1]: *** [CMakeFiles/UnitTests.dir/all] Error 2
make[1]: Target 'all' not remade because of errors.
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
make: Target 'default_target' not remade because of errors.
Is there anything I missed? I guess libpthread for arm will be required..
I will appreciate your feedback
Regards,
Dongjin.