norlab-ulaval / libpointmatcher

An Iterative Closest Point (ICP) library for 2D and 3D mapping in Robotics
BSD 3-Clause "New" or "Revised" License
1.58k stars 544 forks source link

Problems with dynamic library on MacOS #63

Closed drhalftone closed 9 years ago

drhalftone commented 9 years ago

When I compile the code inside of Xcode, which I created using CMake. Everything seems to work fine, but when I try to use the libpointmatcher.dylib in Qt using QMake, I get the following error:

Undefined symbols for architecture x86_64: "PointMatcher::DataPoints::Label::Label(std::string const&, unsigned long)", referenced from: LAUPointMatcherObject::LAUPointMatcherObject(LAUScan, LAUScan, QObject*) in laupointmatcherobject.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Is there something in the CMake set up that means I can't use libpointmatcher with any other build system?

drhalftone commented 9 years ago

Here is the complete compiler listing:

12:24:04: Running steps for project LAUScoliosis... 12:24:04: Configuration unchanged, skipping qmake step. 12:24:04: Starting: "/usr/bin/make" -j16 /Qt/5.4/clang_64/bin/qmake -spec macx-clang CONFIG+=debug CONFIG+=x86_64 -o Makefile ../LAUScoliosis/LAUScoliosis.pro /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -mmacosx-version-min=10.7 -Wl,-rpath,/Qt/5.4/clang_64/lib -o LAUScoliosis.app/Contents/MacOS/LAUScoliosis main.o lauscan.o lauscanmergedialog.o lauiterativeclosestpointobject.o laulaplaciansmootherobject.o laupointmatcherobject.o laufiducialwidget.o qrc_LAUScoliosisWidget.o qrc_shaders.o qrc_lauscan.o moc_lauscan.o moc_lauscanmergedialog.o moc_lauiterativeclosestpointobject.o moc_laulaplaciansmootherobject.o moc_laupointmatcherobject.o moc_laufiducialwidget.o -F/Qt/5.4/clang_64/lib -L/usr/local/lib -ltiff -lboost_container-mt -lboost_system-mt /Users/dllau/Libraries/libpointmatcher/build/libpointmatcher.a -framework QtOpenGL -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL Undefined symbols for architecture x8664: "PointMatcher::DataPoints::Label::Label(std::string const&, unsigned long)", referenced from: LAUPointMatcherObject::LAUPointMatcherObject(LAUScan, LAUScan, QObject) in laupointmatcherobject.o "std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::find(char, unsigned long) const", referenced from: boost::basic_format<char, std::1::char_traits, std::1::allocator >::parse(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) int boost::io::detail::upper_bound_from_fstring<std::__1::basic_string<char, std::1::char_traits, std::1::allocator >, std::1::ctype >(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::value_type, std::1::ctype const&, unsigned char) in libpointmatcher.a(DataPoints.cpp.o) "std::1::vector_base_common::throw_length_error() const", referenced from: std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::vector(unsigned long, PointMatcher::DataPoints::Label const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::vector(unsigned long, PointMatcher::DataPoints::Label const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) void std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::push_back_slow_path<PointMatcher::DataPoints::Label const>(PointMatcher::DataPoints::Label const&) in libpointmatcher.a(DataPoints.cpp.o) void std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::__push_back_slow_path<PointMatcher::DataPoints::Label const>(PointMatcher::DataPoints::Label const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > > >::append(unsigned long, boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::basic_string_common::throw_length_error() const", referenced from: std::__1::basic_stringbuf<char, std::1::char_traits, std::1::allocator >::str() const in libpointmatcher.a(DataPoints.cpp.o) "std::1::locale::use_facet(std::1::locale::id&) const", referenced from: void boost::io::detail::put<char, std::1::char_traits, std::1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::__1::char_traits, std::1::allocator > const&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) std::__1::basic_ostream<char, std::1::char_traits >& std::1::put_character_sequence<char, std::1::char_traits >(std::__1::basic_ostream<char, std::1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::parse(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::__1::char_traits, std::1::allocator >::make_or_reuse_data(unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::ios_base::getloc() const", referenced from: void boost::io::detail::put<char, std::__1::char_traits, std::1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::1::char_traits, std::__1::allocator > const&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) boost::io::detail::stream_format_state<char, std::1::char_traits >::apply_on(std::1::basic_ios<char, std::1::char_traits >&, std::_1::locale) const in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_ostream<char, std::1::char_traits >& std::1::put_character_sequence<char, std::__1::char_traits >(std::1::basic_ostream<char, std::1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::runtime_error::runtime_error(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&)", referenced from: PointMatcher::DataPoints::assertDescriptorConsistency() const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::assertDescriptorConsistency() const in libpointmatcher.a(DataPoints.cpp.o) "std::runtime_error::runtime_error(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&)", referenced from: PointMatcher::DataPoints::InvalidField::InvalidField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::InvalidField::InvalidField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, unsigned int, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::getConstViewByName(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, int) const in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::basic_string<char, std::1::chartraits, std::1::allocator >::init(char const, unsigned long)", referenced from: PointMatcher::DataPoints::addFeature(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addFeature(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::basicformat(char const) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::1::chartraits, std::1::allocator >::init(char const, unsigned long, unsigned long)", referenced from: std::1::basic_string<char, std::__1::char_traits, std::1::allocator > std::1::operator+<char, std::1::char_traits, std::1::allocator >(std::1::basic_string<char, std::1::char_traits, std::_1::allocator > const&, char const) in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_string<char, std::1::char_traits, std::1::allocator > std::1::operator+<char, std::__1::char_traits, std::1::allocator >(char const_, std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::init(unsigned long, char)", referenced from: std::1::ostreambuf_iterator<char, std::1::char_traits > std::1::pad_and_output<char, std::__1::char_traits >(std::1::ostreambuf_iterator<char, std::1::chartraits >, char const, char const, char const, std::1::ios_base&, char) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::append(char const_, unsigned long)", referenced from: boost::basic_format<char, std::1::char_traits, std::1::allocator >::str() const in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_string<char, std::1::char_traits, std::1::allocator > std::1::operator+<char, std::1::char_traits, std::1::allocator >(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, char const_) in libpointmatcher.a(DataPoints.cpp.o) std::__1::basic_string<char, std::1::char_traits, std::1::allocator > std::1::operator+<char, std::1::char_traits, std::_1::allocator >(char const, std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::put<char, std::1::char_traits, std::1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::1::char_traits, std::__1::allocator > const&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::mk_str<char, std::1::char_traits, std::1::allocator >(std::1::basic_string<char, std::1::char_traits, std::1::allocator >&, char const_, std::__1::basic_string<char, std::1::char_traits, std::1::allocator >::size_type, long, char, unsigned int, char, bool) in libpointmatcher.a(DataPoints.cpp.o) "std::__1::basic_string<char, std::1::char_traits, std::1::allocator >::append(unsigned long, char)", referenced from: boost::basic_format<char, std::__1::char_traits, std::1::allocator >::str() const in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::put<char, std::1::char_traits, std::__1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > const&, boost::basic_format<char, std::__1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::mk_str<char, std::__1::char_traits, std::1::allocator >(std::1::basic_string<char, std::__1::char_traits, std::1::allocator >&, char const_, std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::size_type, long, char, unsigned int, char, bool) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::assign(char const_, unsigned long)", referenced from: void boost::io::detail::put<char, std::1::char_traits, std::__1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > const&, boost::basic_format<char, std::__1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::1::char_traits, std::1::allocator >::resize(unsigned long, char)", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::assertDescriptorConsistency() const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, unsigned int, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::getConstViewByName(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, int) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::getViewByName(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&, int) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::basic_string<char, std::1::char_traits, std::__1::allocator >::reserve(unsigned long)", referenced from: boost::basic_format<char, std::1::char_traits, std::1::allocator >::str() const in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::mk_str<char, std::__1::char_traits, std::1::allocator >(std::1::basic_string<char, std::__1::char_traits, std::1::allocator >&, char const_, std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::size_type, long, char, unsigned int, char, bool) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::__1::char_traits, std::1::allocator >::grow_by(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)", referenced from: boost::basic_format<char, std::1::char_traits, std::1::allocator >::parse(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::1::char_traits, std::1::allocator >::push_back(char)", referenced from: std::__1::basic_stringbuf<char, std::1::char_traits, std::1::allocator >::overflow(int) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_string<char, std::1::char_traits, std::__1::allocator >::basic_string(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&)", referenced from: PointMatcher::DataPoints::Label::Label(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::Label::Label(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<PointMatcher::DataPoints::Label, std::__1::allocator<PointMatcher::DataPoints::Label> >::vector(unsigned long, PointMatcher::DataPoints::Label const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::str() const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, unsigned int, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::basic_string<char, std::1::char_traits, std::1::allocator >::~basic_string()", referenced from: std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::vector(unsigned long, PointMatcher::DataPoints::Label const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::DataPoints(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels const&, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::DataPoints(Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator >::~basic_stringstream() in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::str() const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::basic_string<char, std::1::char_traits, std::1::allocator >::operator=(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&)", referenced from: PointMatcher::DataPoints::removeField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::removeField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > > >::assign(unsigned long, boost::io::detail::format_item<char, std::__1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_stringbuf<char, std::__1::char_traits, std::1::allocator >::str(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::enable_if<(is_forwarditerator<PointMatcher::DataPoints::Label>::value) && (is_constructible<PointMatcher::DataPoints::Label, std::1::iteratortraits<PointMatcher::DataPoints::Label>::reference>::value), void>::type std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::assign<PointMatcher::DataPoints::Label>(PointMatcher::DataPoints::Label, PointMatcher::DataPoints::Label_) in libpointmatcher.a(DataPoints.cpp.o) std::1::enable_if<(is_forwarditerator<PointMatcher::DataPoints::Label>::value) && (is_constructible<PointMatcher::DataPoints::Label, std::1::iteratortraits<PointMatcher::DataPoints::Label>::reference>::value), void>::type std::1::vector<PointMatcher::DataPoints::Label, std::1::allocator<PointMatcher::DataPoints::Label> >::assign<PointMatcher::DataPoints::Label>(PointMatcher::DataPoints::Label, PointMatcher::DataPoints::Label_) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_istream<char, std::1::char_traits >::~basic_istream()", referenced from: construction vtable for std::1::basic_istream<char, std::1::char_traits >-in-std::1::basic_stringstream<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_istream<char, std::1::char_traits >::~basic_istream()", referenced from: construction vtable for std::1::basic_istream<char, std::1::char_traits >-in-std::1::basic_stringstream<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::__1::char_traits >::sentry::sentry(std::1::basic_ostream<char, std::1::char_traits >&)", referenced from: std::__1::basic_ostream<char, std::1::char_traits >& std::1::put_character_sequence<char, std::1::char_traits >(std::__1::basic_ostream<char, std::1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::__1::char_traits >::sentry::~sentry()", referenced from: std::1::basic_ostream<char, std::1::char_traits >& std::1::put_character_sequence<char, std::__1::char_traits >(std::1::basic_ostream<char, std::1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::1::char_traits >::~basic_ostream()", referenced from: construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::1::char_traits >::~basic_ostream()", referenced from: construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::1::char_traits >::~basic_ostream()", referenced from: void boost::io::detail::put<char, std::1::char_traits, std::1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::__1::char_traits, std::1::allocator > const&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator >::~basic_oaltstringstream() in libpointmatcher.a(DataPoints.cpp.o) non-virtual thunk to boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator >::~basic_oaltstringstream() in libpointmatcher.a(DataPoints.cpp.o) boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator >::~basic_oaltstringstream() in libpointmatcher.a(DataPoints.cpp.o) non-virtual thunk to boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator >::~basic_oaltstringstream() in libpointmatcher.a(DataPoints.cpp.o) "std::__1::basic_ostream<char, std::1::char_traits >::operator<<(int)", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::call_put_last<char, std::1::char_traits, int const>(std::__1::basic_ostream<char, std::1::chartraits >&, void const) in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::call_put_last<char, std::1::char_traits, int>(std::__1::basic_ostream<char, std::1::chartraits >&, void const) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::__1::char_traits >::operator<<(unsigned int)", referenced from: void boost::io::detail::call_put_last<char, std::1::char_traits, unsigned int const>(std::1::basic_ostream<char, std::1::chartraits >&, void const) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::1::char_traits >::operator<<(long)", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::call_put_last<char, std::1::char_traits, long const>(std::__1::basic_ostream<char, std::1::chartraits >&, void const) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ostream<char, std::__1::char_traits >::operator<<(unsigned long)", referenced from: void boost::io::detail::call_put_last<char, std::1::char_traits, unsigned long const>(std::1::basic_ostream<char, std::1::chartraits >&, void const) in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::call_put_last<char, std::1::char_traits, unsigned long>(std::1::basic_ostream<char, std::1::chartraits >&, void const) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: construction vtable for std::1::basic_iostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: construction vtable for std::1::basic_iostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_stringstream<char, std::1::char_traits, std::__1::allocator >::~basic_stringstream() in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_stringstream<char, std::1::char_traits, std::__1::allocator >::~basic_stringstream() in libpointmatcher.a(DataPoints.cpp.o) non-virtual thunk to std::1::basic_stringstream<char, std::1::char_traits, std::__1::allocator >::~basic_stringstream() in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::basic_streambuf<char, std::1::char_traits >::sync()", referenced from: vtable for boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::char_traits >::imbue(std::1::locale const&)", referenced from: vtable for boost::io::basic_altstringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::char_traits >::uflow()", referenced from: vtable for boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::__1::chartraits >::setbuf(char, long)", referenced from: vtable for boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::chartraits >::xsgetn(char, long)", referenced from: vtable for boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::chartraits >::xsputn(char const, long)", referenced from: vtable for boost::io::basic_altstringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::char_traits >::showmanyc()", referenced from: vtable for boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) vtable for std::1::basic_stringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::char_traits >::basic_streambuf()", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::__1::allocator > const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::basicformat(char const) in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_streambuf<char, std::1::char_traits >::~basic_streambuf()", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_stringstream<char, std::1::char_traits, std::__1::allocator >::~basic_stringstream() in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::assertDescriptorConsistency() const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, unsigned int, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::getConstViewByName(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, int) const in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::ctype::id", referenced from: void boost::io::detail::put<char, std::__1::char_traits, std::1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::1::char_traits, std::__1::allocator > const&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_ostream<char, std::__1::char_traits >& std::1::put_character_sequence<char, std::1::char_traits >(std::1::basic_ostream<char, std::__1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::parse(std::1::basic_string<char, std::1::char_traits, std::__1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::make_or_reuse_data(unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::locale::locale(std::1::locale const&)", referenced from: boost::io::detail::stream_format_state<char, std::1::char_traits >::apply_on(std::1::basic_ios<char, std::1::char_traits >&, std::1::locale_) const in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::parse(std::1::basic_string<char, std::1::char_traits, std::__1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::1::allocator >::make_or_reuse_data(unsigned long) in libpointmatcher.a(DataPoints.cpp.o) std::__1::vector<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > > >::append(unsigned long, boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::split_buffer<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > >&>::construct_at_end(unsigned long, boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > > >::swap_out_circular_buffer(std::1::split_buffer<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > >&>&) in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > > >::assign(unsigned long, boost::io::detail::format_item<char, std::__1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::locale::locale()", referenced from: boost::basic_format<char, std::__1::char_traits, std::1::allocator >::parse(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) boost::basic_format<char, std::1::char_traits, std::__1::allocator >::make_or_reuse_data(unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::locale::~locale()", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateFields(PointMatcher::DataPoints::Labels const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::assertDescriptorConsistency() const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::allocateField(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, unsigned int, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::getConstViewByName(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, int) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::getViewByName(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, PointMatcher::DataPoints::Labels const&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&, int) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) ... "std::1::locale::operator=(std::1::locale const&)", referenced from: boost::io::detail::stream_format_state<char, std::1::char_traits >::apply_on(std::1::basic_ios<char, std::1::char_traits >&, std::_1::locale) const in libpointmatcher.a(DataPoints.cpp.o) std::1::vector<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator >, std::1::allocator<boost::io::detail::format_item<char, std::1::char_traits, std::1::allocator > > >::assign(unsigned long, boost::io::detail::format_item<char, std::__1::char_traits, std::1::allocator > const&) in libpointmatcher.a(DataPoints.cpp.o) "std::1::ios_base::set_badbit_and_consider_rethrow()", referenced from: std::1::basic_ostream<char, std::1::char_traits >& std::1::put_character_sequence<char, std::1::char_traits >(std::__1::basic_ostream<char, std::1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::iosbase::init(void)", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) boost::io::basic_oaltstringstream<char, std::__1::char_traits, std::1::allocator >::basic_oaltstringstream(boost::io::basic_altstringbuf<char, std::1::char_traits, std::_1::allocator >) in libpointmatcher.a(DataPoints.cpp.o) "std::1::ios_base::clear(unsigned int)", referenced from: boost::io::detail::stream_format_state<char, std::1::char_traits >::apply_on(std::1::basic_ios<char, std::1::char_traits >&, std::_1::locale) const in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_ostream<char, std::1::char_traits >& std::1::put_character_sequence<char, std::__1::char_traits >(std::1::basic_ostream<char, std::1::chartraits >&, char const, unsigned long) in libpointmatcher.a(DataPoints.cpp.o) "std::1::ios_base::imbue(std::1::locale const&)", referenced from: boost::io::detail::stream_format_state<char, std::1::char_traits >::apply_on(std::1::basic_ios<char, std::__1::char_traits >&, std::1::locale_) const in libpointmatcher.a(DataPoints.cpp.o) "std::1::basic_ios<char, std::1::char_traits >::~basic_ios()", referenced from: PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) std::1::basic_stringstream<char, std::1::char_traits, std::1::allocator >::~basic_stringstream() in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::__1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<float, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::concatenate(PointMatcher::DataPoints const&) in libpointmatcher.a(DataPoints.cpp.o) PointMatcher::DataPoints::addField(std::1::basic_string<char, std::1::char_traits, std::1::allocator > const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, PointMatcher::DataPoints::Labels&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const in libpointmatcher.a(DataPoints.cpp.o) void boost::io::detail::put<char, std::1::char_traits, std::1::allocator, boost::io::detail::put_holder<char, std::1::char_traits > const&>(boost::io::detail::put_holder<char, std::1::char_traits > const&, boost::io::detail::format_item<char, std::1::char_traits, std::__1::allocator > const&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::string_type&, boost::basic_format<char, std::1::char_traits, std::1::allocator >::internal_streambuf_t&, std::1::locale_) in libpointmatcher.a(DataPoints.cpp.o) boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator >::basic_oaltstringstream(boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator >_) in libpointmatcher.a(DataPoints.cpp.o) ... "typeinfo for std::1::basic_istream<char, std::__1::char_traits >", referenced from: construction vtable for std::1::basic_istream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "typeinfo for std::1::basic_ostream<char, std::1::char_traits >", referenced from: construction vtable for std::__1::basic_ostream<char, std::1::char_traits >-in-boost::io::basic_oaltstringstream<char, std::1::char_traits, std::__1::allocator > in libpointmatcher.a(DataPoints.cpp.o) typeinfo for boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "typeinfo for std::1::basic_iostream<char, std::1::char_traits >", referenced from: construction vtable for std::__1::basic_iostream<char, std::1::char_traits >-in-std::1::basic_stringstream<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) typeinfo for std::1::basic_stringstream<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "typeinfo for std::1::basic_streambuf<char, std::1::char_traits >", referenced from: typeinfo for boost::io::basic_altstringbuf<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) typeinfo for std::1::basic_stringbuf<char, std::__1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "vtable for std::1::basic_ios<char, std::1::char_traits >", referenced from: boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator >::basic_oaltstringstream(boost::io::basic_altstringbuf<char, std::1::char_traits, std::_1::allocator >) in libpointmatcher.a(DataPoints.cpp.o) NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "non-virtual thunk to std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: construction vtable for std::1::basic_iostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: construction vtable for std::1::basic_iostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_istream<char, std::1::char_traits >::~basic_istream()", referenced from: construction vtable for std::1::basic_istream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_istream<char, std::1::char_traits >::~basic_istream()", referenced from: construction vtable for std::1::basic_istream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_ostream<char, std::1::char_traits >::~basic_ostream()", referenced from: construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_ostream<char, std::1::char_traits >::~basic_ostream()", referenced from: construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-boost::io::basic_oaltstringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) construction vtable for std::1::basic_ostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: construction vtable for std::1::basic_iostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::1::allocator > in libpointmatcher.a(DataPoints.cpp.o) "non-virtual thunk to std::1::basic_iostream<char, std::1::char_traits >::~basic_iostream()", referenced from: construction vtable for std::1::basic_iostream<char, std::1::char_traits >-in-std::__1::basic_stringstream<char, std::1::char_traits, std::__1::allocator > in libpointmatcher.a(DataPoints.cpp.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *\ [LAUScoliosis.app/Contents/MacOS/LAUScoliosis] Error 1 12:24:06: The process "/usr/bin/make" exited with code 2. Error while building/deploying project LAUScoliosis (kit: Desktop Qt 5.4.0 clang 64bit) When executing step "Make" 12:24:06: Elapsed time: 00:02.

pomerlef commented 9 years ago

ok, it seems that there is a list of problem using libpointmatcher under MacOS environment. I've access to a Mac with the OS 10.10.2 (14C109). I never developed on it but I can give it a try for a day to see how far I go. It should happen during the week. Meanwhile, if you have any other details that would help me, don't hesitate to post them.

drhalftone commented 9 years ago

Searching online, the only hint I can seem to find is perhaps cmake is linking to the wrong std library, either libc++ or libstdc++. From what I know, this has been an issue for a while since Apple made the change from one to the other.

drhalftone commented 9 years ago

That last comment looks like a dead end.

You might have noticed that I fixed the issue from the previous post. I just had to edit the CMAKE file, line 215, to explicitly include the boost libraries. But even with the correctly built dynamic library, the unit test is failing to build. And I still have the issue described above using the correctly built library. But at least now, I'm seeing this error universally across CMAKE and unix make files, CMAKE with Xcode project, and Qt using Qmake to link the library. So we can probably eliminate any issue that is compiler system dependent.

pomerlef commented 9 years ago

Hi,

I compile successfully the library today with CMake and could run all the unit tests.

To work, the library need to be build as a static one (i.e., libpointmatcher.a). There seems to be a difference between dynamic libraries and bundles on MacOS for which I'm not quite familiar with. Through me reading, it seems that using static link is the easiest way to keep it simple.

Could you try this on your side? When using CMake to generate the makefile, use the following line:

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSHARED_LIBS=OFF ${SRC_DIR}

This will force the creation of a static library. You can confirm that everything is working using:

utest/utest --path ../examples/data/

If that work for you, I'll make sure that this is the default behavior on MacOS. Also, I updated the documentation for MacOS build.

Lets start with that, then we can check for the linking problem in an external project.

Cheers!

drhalftone commented 9 years ago

It now compiles completely and successfully runs through its unit tests. So everything seems to be working fine. I am unable to link the library to my Qt code, though. I'm trying to create a QObject class that I can use to wrap around an ICP object. So this object has the following private variables:

private:

PointMatcher<float>::DataPoints stationaryPoints;

PointMatcher<float>::DataPoints movingPoints;

Eigen::MatrixXf scanToMatrix(LAUScan scan);

};

And just including these two lines of code causes the following error during compilation:

Undefined symbols for architecture x8664: "PointMatcher::DataPoints::DataPoints()", referenced from: LAUPointMatcherObject::LAUPointMatcherObject(LAUScan, LAUScan, QObject) in laupointmatcherobject.o "PointMatcher::ICPChainBase::setDefault()", referenced from: vtable for PointMatcher::ICP in laupointmatcherobject.o "PointMatcher::ICPChainBase::loadAdditionalYAMLContent(YAML_PM::Node&)", referenced from: vtable for PointMatcher::ICP in laupointmatcherobject.o "PointMatcher::ICPChainBase::ICPChainBase()", referenced from: PointMatcher::ICP::ICP() in laupointmatcherobject.o "PointMatcher::ICPChainBase::~ICPChainBase()", referenced from: PointMatcher::ICP::~ICP() in laupointmatcherobject.o ld: symbol(s) not found for architecture x8664 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: ** [LAUScoliosis.app/Contents/MacOS/LAUScoliosis] Error 1 19:58:46: The process "/usr/bin/make" exited with code 2. Error while building/deploying project LAUScoliosis (kit: Desktop Qt 5.4.0 clang 64bit) When executing step "Make" 19:58:46: Elapsed time: 00:06.

Clearly this is not the libraries fault. I must not be doing everything I need to do to include a cmake built library into my QMake project. Any suggestions would be appreciated. But thank you very much for fixing the compilation issues because I would have continued to suspect that the problem was in libpointmatcher.

drhalftone commented 9 years ago

I sent you the wrong error message. Here is the right one:

Undefined symbols for architecture x8664: "PointMatcher::DataPoints::DataPoints()", referenced from: LAUPointMatcherObject::LAUPointMatcherObject(LAUScan, LAUScan, QObject) in laupointmatcherobject.o ld: symbol(s) not found for architecture x8664 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: ** [LAUScoliosis.app/Contents/MacOS/LAUScoliosis] Error 1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -mmacosx-version-min=10.7 -Wl,-rpath,/Qt/5.4/clang_64/lib -o LAUScoliosis.app/Contents/MacOS/LAUScoliosis main.o lauscan.o lauscanmergedialog.o lauiterativeclosestpointobject.o laulaplaciansmootherobject.o laupointmatcherobject.o laufiducialwidget.o qrc_LAUScoliosisWidget.o qrc_shaders.o qrc_lauscan.o moc_lauscan.o moc_lauscanmergedialog.o moc_lauiterativeclosestpointobject.o moc_laulaplaciansmootherobject.o moc_laupointmatcherobject.o moc_laufiducialwidget.o -F/Qt/5.4/clang_64/lib -L/usr/local/lib -ltiff /usr/local/lib/libboost_system-mt.dylib /Users/dllau/Libraries/libnabo/build/libnabo.a -framework QtOpenGL -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL 20:02:05: The process "/usr/bin/make" exited with code 2. Error while building/deploying project LAUScoliosis (kit: Desktop Qt 5.4.0 clang 64bit) When executing step "Make" 20:02:05: Elapsed time: 00:03.

drhalftone commented 9 years ago

One last question. Is there any chance that you are connecting to the libstdc++ library instead of the libc++ library? When Apple made Clang the default compiler, it also made libc++ the standard library over libstdc++. There were a lot of problems during the transition, like the linking issue I am having right now with some programmers using the older library.

pomerlef commented 9 years ago

We don't use specific calls for MacOS build. Given that link the default since Maverick is libc++ .

Here is the full line called to compile one of the demo file. On my system /usr/bin/c++ is pointing to clang++:

/usr/bin/c++   -O2 -g -DNDEBUG -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/pmicp.dir/icp.cpp.o  -o pmicp  ../libpointmatcher.a /usr/local/lib/libboost_thread-mt.dylib /usr/local/lib/libboost_filesystem-mt.dylib /usr/local/lib/libboost_system-mt.dylib /usr/local/lib/libboost_program_options-mt.dylib /usr/local/lib/libboost_date_time-mt.dylib /usr/local/lib/libboost_chrono-mt.dylib ../contrib/yaml-cpp-pm/libyaml-cpp-pm.a /Users/francoispomerleau/Research/Code/libnabo/build//libnabo.a

If you want to compare on your system, you can use the following:

make VERBOSE=true

I'm not very used to development on MacOS, so it's less clear for me what's the impact of those libraries. I can tell that the whole library do not rely on c++11 functionalities as it caused some problem on Windows in the past.

pomerlef commented 9 years ago

ok, I'm slowly catching up with MacOS development tools. You can use otool -L to see against what your executable is linked.

Here is an example with pmicp:

otool -L ./examples/pmicp 
./examples/pmicp:
    /usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libboost_filesystem-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libboost_system-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libboost_program_options-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libboost_date_time-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libboost_chrono-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

which show that it's linked to libc++.1.dylib.

pomerlef commented 9 years ago

I'll rename this issue so it is clearer and close it with the commit e020f2a063ae84229ca112ec011855aefab4f60d. The option of building dynamic library is disabled for when the APPLE variable is defined by cmake. So, libpointmatcher will only be build as a static library for simplicity.

I'll close this issue. To keep things separated, if you have further problem with linking libpointmatcher to an external project, please open another issue.

Cheers!

pomerlef commented 9 years ago

@drhalftone you were right about some dependency problems for an external project. The latest commit should fix the problem and there is an example on how to add libpointmatcher to an external project.

Now, after compiling libpointmatcher, you can do:

cd /examples/demo_external_link/
mkdir build
cd build
cmake ..
make

to confirm that a minimal example can work.

For more details, please follow what's going on in Issue #61 .

Cheers!