Errors linking on Orbbec Persee ARMv7 (compile is ok)


#1

I’m trying to compile OF 0.9.8 on the Orbbec Persee (a Cortex A17 ARMv7 board) running Ubuntu 14.04.

OF and the emptyExample app seem to compile ok, but it fails when linking. It looks like there’s some incompatibility with libraries I think – perhaps GCC versions or something like that. GCC 4.8 is the installed version.

I get output like this:

$ make
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
Compiling OF library for Release
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
make[1]: Entering directory `/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/project'
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
Done!
make[1]: Leaving directory `/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/project'


Compiling emptyExample for Release
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
make[1]: Entering directory `/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/examples/empty/emptyExample'
Linking bin/emptyExample for linuxarmv7l
g++ -o bin/emptyExample  obj/linuxarmv7l/Release/src/main.o obj/linuxarmv7l/Release/src/ofApp.o  /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/lib/linuxarmv7l/libopenFrameworks.a   -Wl,-rpath=./libs:./bin/libs -Wl,--as-needed -Wl,--gc-sections /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/glfw/lib/linuxarmv7l/libglfw3.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/kiss/lib/linuxarmv7l/libkiss.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/tess2/lib/linuxarmv7l/libtess2.a  /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoCrypto.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoUtil.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoJSON.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoXML.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoFoundation.a  -lz -lgstapp-1.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstreamer-1.0 -ludev -lfontconfig -lfreetype -lsndfile -lopenal -lssl -lcrypto -lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 -lGLESv1_CM -lGLESv2 -lEGL   -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -ldl -lpthread -lfreeimage -lboost_filesystem -lboost_system -lrtaudio
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/lib/linuxarmv7l/libopenFrameworks.a(ofImage.o): In function `bool loadImage<unsigned char>(ofPixels_<unsigned char>&, std::string)':
ofImage.cpp:(.text+0x1a4e): undefined reference to `Poco::URI::URI(std::string const&)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/lib/linuxarmv7l/libopenFrameworks.a(ofImage.o): In function `bool loadImage<unsigned short>(ofPixels_<unsigned short>&, std::string)':
ofImage.cpp:(.text+0x1efa): undefined reference to `Poco::URI::URI(std::string const&)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/lib/linuxarmv7l/libopenFrameworks.a(ofImage.o): In function `bool loadImage<float>(ofPixels_<float>&, std::string)':
ofImage.cpp:(.text+0x22d6): undefined reference to `Poco::URI::URI(std::string const&)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(InvalidCertificateHandler.o): In function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) [clone .isra.20]':
InvalidCertificateHandler.cpp:(.text.unlikely+0x40): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(PrivateKeyPassphraseHandler.o): In function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) [clone .isra.20]':
PrivateKeyPassphraseHandler.cpp:(.text.unlikely+0x40): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(Context.o): In function `void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*>(char const*, char const*, std::forward_iterator_tag) [clone .isra.18]':
Context.cpp:(.text+0x110): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(Context.o): In function `Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
Context.cpp:(.text+0x18f4): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
Context.cpp:(.text+0x1900): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
Context.cpp:(.text+0x190c): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
Context.cpp:(.text+0x1928): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(Context.o): In function `Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
Context.cpp:(.text+0x1a44): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(Context.o):Context.cpp:(.text+0x1a5c): more undefined references to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' follow
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a(SecureStreamSocket.o): In function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) [clone .isra.17] [clone .constprop.18]':
SecureStreamSocket.cpp:(.text.unlikely+0x24): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'

…and so on. I saw this issue https://github.com/openframeworks/openFrameworks/issues/5363 which looked similar, so I tried running apothecary update poco which ran without issue. When trying to compile again, I get…

$ make
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
Compiling OF library for Release
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
make[1]: Entering directory `/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/project'
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
Done!
make[1]: Leaving directory `/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/project'


Compiling emptyExample for Release
HOST_OS=Linux
checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0 glesv1_cm glesv2 egl 
make[1]: Entering directory `/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/examples/empty/emptyExample'
Linking bin/emptyExample for linuxarmv7l
g++ -o bin/emptyExample  obj/linuxarmv7l/Release/src/main.o obj/linuxarmv7l/Release/src/ofApp.o  /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/openFrameworksCompiled/lib/linuxarmv7l/libopenFrameworks.a   -Wl,-rpath=./libs:./bin/libs -Wl,--as-needed -Wl,--gc-sections /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/glfw/lib/linuxarmv7l/libglfw3.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/kiss/lib/linuxarmv7l/libkiss.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/tess2/lib/linuxarmv7l/libtess2.a  /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNetSSL.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoCrypto.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoUtil.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoJSON.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoXML.a /home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoFoundation.a  -lz -lgstapp-1.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstreamer-1.0 -ludev -lfontconfig -lfreetype -lsndfile -lopenal -lssl -lcrypto -lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 -lGLESv1_CM -lGLESv2 -lEGL   -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -ldl -lpthread -lfreeimage -lboost_filesystem -lboost_system -lrtaudio
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a(MessageHeader.o): In function `Poco::Net::MessageHeader::~MessageHeader()':
MessageHeader.cpp:(.text+0x8): undefined reference to `Poco::Net::NameValueCollection::~NameValueCollection()'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a(MessageHeader.o): In function `Poco::Net::MessageHeader::~MessageHeader()':
MessageHeader.cpp:(.text+0x1c): undefined reference to `Poco::Net::NameValueCollection::~NameValueCollection()'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a(MessageHeader.o): In function `Poco::Net::MessageHeader::write(std::ostream&) const':
MessageHeader.cpp:(.text+0x36): undefined reference to `Poco::Net::NameValueCollection::begin() const'
MessageHeader.cpp:(.text+0x76): undefined reference to `Poco::Net::NameValueCollection::end() const'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a(MessageHeader.o): In function `Poco::Net::MessageHeader::MessageHeader()':
MessageHeader.cpp:(.text+0x88): undefined reference to `Poco::Net::NameValueCollection::NameValueCollection()'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a(MessageHeader.o): In function `Poco::Net::MessageHeader::MessageHeader(Poco::Net::MessageHeader const&)':
MessageHeader.cpp:(.text+0xa0): undefined reference to `Poco::Net::NameValueCollection::NameValueCollection(Poco::Net::NameValueCollection const&)'
/home/orbbec/Downloads/of_v0.9.8_linuxarmv7l_release/libs/poco/lib/linuxarmv7l/libPocoNet.a(MessageHeader.o): In function `Poco::Net::MessageHeader::operator=(Poco::Net::MessageHeader const&)':

…and so on.

I also tried compiling the ARMv6 version, but I get errors about an unsupported platform and that I possibly downloaded the wrong version. I know that rPi3 can run the ARMv6 version despite it being an ARMv7 board, so I thought could work here, but am not sure what needs to be changed in the Makefile or elsewhere.

Any thoughts on where to go from here?


#2

I would try installing gcc 4.9. As I recall 4.8 doesn’t have the C++11 support that OF requires.


#3

Thanks, @jvcleave, I can try upgrading the gcc version. I’m curious though – if that were the case I would expect to see compile errors, no? I need to check the output again, but I’m pretty sure both OF and the example app both compile with only warnings and no errors, and then fails when trying to link the binary.


#4

The biggest issue that I remember is that regex was broken/unimplemented in 4.8

but yeah - the latter looks more like a link order issue


#5

Hi there!

I’m planning to work with Orbbec Persee devices.
Did you finally have success compiling OF 0.9.8 on ARM v7 ?

Thanks


#6

Sadly no, I gave up and used a kinect for that project. If 0.9.8 if problematic, you could give the dev version a shot. I think Poco has been removed which might’ve been part of the problem.


#7

Hi blindsp0t & matt
Are there any news on this. Did one of you manage to use the Orbbec Persee with oF directly, using your ofxOrbbecAstra?
Best regards and merry christmas
Jonas


#8

No, I haven’t touched the Persee in a long while. I still think trying OF 0.10 without Poco seems like a good first step though. Please share your results if you give this a shot!


#9

FYI I took up @mattfelsen 's work and updated it to 0.10.1. Thanks Matt!
I haven’t tried the Persee but the Astra Pro works fine with it. It works on 0.9.8 as well.