Hi, guys.
I'm curious if it is possible to use libc++ with Vuforia SDK 3.0? I see the libVuforia.a is build with libstdc++ but my application uses a lot of code that is libc++ dependent, so I would like to ask you to give developers a possibility to use libc++ in their projects (which is a default for iOS 5 and later). I think you can build two versions and provide them both to developers as such a restriction is really critical for some users as they don't have access to entire source code to build it from scratch using the standard library they need.
Now I have link errors in Xcode 5 (which are expected) like:
Undefined symbols for architecture armv7:
"vtable for std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"VTT for std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::cerr", referenced from:
l10744 in libVuforia.a(libVuforia.a-armv7-master.o)
l14918 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::string::assign(std::string const&)", referenced from:
l14884 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ios_base::Init::~Init()", referenced from:
l15185 in libVuforia.a(libVuforia.a-armv7-master.o)
l15186 in libVuforia.a(libVuforia.a-armv7-master.o)
l15210 in libVuforia.a(libVuforia.a-armv7-master.o)
l15211 in libVuforia.a(libVuforia.a-armv7-master.o)
l15214 in libVuforia.a(libVuforia.a-armv7-master.o)
l15215 in libVuforia.a(libVuforia.a-armv7-master.o)
l15217 in libVuforia.a(libVuforia.a-armv7-master.o)
...
"std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:
l14755 in libVuforia.a(libVuforia.a-armv7-master.o)
l14756 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
l14755 in libVuforia.a(libVuforia.a-armv7-master.o)
l14756 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ostream::flush()", referenced from:
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
l14918 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_ios<char, std::char_traits<char> >::widen(char) const", referenced from:
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
l14918 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char)", referenced from:
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
"vtable for std::basic_streambuf<char, std::char_traits<char> >", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)", referenced from:
l10749 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:
l10747 in libVuforia.a(libVuforia.a-armv7-master.o)
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
l14884 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::istream& std::istream::_M_extract<unsigned int>(unsigned int&)", referenced from:
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::cout", referenced from:
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:
l14755 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)", referenced from:
l10744 in libVuforia.a(libVuforia.a-armv7-master.o)
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)", referenced from:
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10749 in libVuforia.a(libVuforia.a-armv7-master.o)
l10751 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ios_base::Init::Init()", referenced from:
l15185 in libVuforia.a(libVuforia.a-armv7-master.o)
l15186 in libVuforia.a(libVuforia.a-armv7-master.o)
l15210 in libVuforia.a(libVuforia.a-armv7-master.o)
l15211 in libVuforia.a(libVuforia.a-armv7-master.o)
l15214 in libVuforia.a(libVuforia.a-armv7-master.o)
l15215 in libVuforia.a(libVuforia.a-armv7-master.o)
l15217 in libVuforia.a(libVuforia.a-armv7-master.o)
...
"std::string::find_first_of(char const*, unsigned long, unsigned long) const", referenced from:
l10747 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ostream::operator<<(int)", referenced from:
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
l14918 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::string::compare(char const*) const", referenced from:
l10742 in libVuforia.a(libVuforia.a-armv7-master.o)
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&, unsigned long, unsigned long)", referenced from:
l10747 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ostream& std::ostream::_M_insert<unsigned long>(unsigned long)", referenced from:
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::string::_Rep::_M_destroy(std::allocator<char> const&)", referenced from:
l10742 in libVuforia.a(libVuforia.a-armv7-master.o)
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10747 in libVuforia.a(libVuforia.a-armv7-master.o)
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10749 in libVuforia.a(libVuforia.a-armv7-master.o)
l10751 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
...
"std::string::_Rep::_S_empty_rep_storage", referenced from:
l10742 in libVuforia.a(libVuforia.a-armv7-master.o)
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10747 in libVuforia.a(libVuforia.a-armv7-master.o)
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10749 in libVuforia.a(libVuforia.a-armv7-master.o)
l10751 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
...
"std::locale::~locale()", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >::basic_istringstream(std::string const&, std::_Ios_Openmode)", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::__throw_length_error(char const*)", referenced from:
l14873 in libVuforia.a(libVuforia.a-armv7-master.o)
l14879 in libVuforia.a(libVuforia.a-armv7-master.o)
l14880 in libVuforia.a(libVuforia.a-armv7-master.o)
l14884 in libVuforia.a(libVuforia.a-armv7-master.o)
l14885 in libVuforia.a(libVuforia.a-armv7-master.o)
l14949 in libVuforia.a(libVuforia.a-armv7-master.o)
l14979 in libVuforia.a(libVuforia.a-armv7-master.o)
...
"std::__throw_out_of_range(char const*)", referenced from:
l10747 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ostream& std::ostream::_M_insert<double>(double)", referenced from:
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::istream::operator>>(int&)", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
l10742 in libVuforia.a(libVuforia.a-armv7-master.o)
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ostream::put(char)", referenced from:
l10862 in libVuforia.a(libVuforia.a-armv7-master.o)
l14918 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::ios_base::~ios_base()", referenced from:
l10743 in libVuforia.a(libVuforia.a-armv7-master.o)
l10754 in libVuforia.a(libVuforia.a-armv7-master.o)
l10798 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::istream::get()", referenced from:
l10748 in libVuforia.a(libVuforia.a-armv7-master.o)
l10750 in libVuforia.a(libVuforia.a-armv7-master.o)
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
"std::istream& std::istream::_M_extract<float>(float&)", referenced from:
l10752 in libVuforia.a(libVuforia.a-armv7-master.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
libc++ standard library support
+1 to libc++ linkage
I've been using 2.8.3 previously with my C++11 code and everything worked like a charm. With the new 3.0.5 build my app now fails to link due to the same issues like topicstarter have.
libc++ standard library support
+1
Haveing the same problem. Currently have to stay at 2.8.x :(
libc++ standard library support
Ok, I checked with the Development Team and this ought to work.
Essentially you should be able to get this working by linking with both STLs which should be possible.
In Build Settings in XCode you can leave the setting for "C++ Standard Library" set for C++11.
libc++ standard library support
Hi!
I just faced this very issue, with the exact same linker errors as the OP.
I tried different ways to link with both libs, including your proposed solution, but that hasn't fixed the issue, I'm still getting the linker errors.
What I tried:
libc++ standard library support
Hi JBL
Of the three things you tried, the approach we suggest is the second one:
libc++ standard library support
What you are proposing to do is not a good idea actually because of big difference in implementations of C++ standard libraries.
libc++ standard library support
Hi! Thanks for your quick response.
Yes, I do know that Apple doesn't support beyond GCC 4.2 and that's precisely why we don't want to switch our whole project to libstdc++ and keep building with libc++.
libc++ standard library support
Hi
Could you please copy and paste from the build log the linker command showing all its parameters?
cheers
N
libc++ standard library support
My linker command is as follows:
libc++ standard library support
Hi
Just wondering why I cannot see the full path of libstdc++.dylib in the linker command?
libc++ standard library support
Yep, I put exactly the path you mentioned in the "Other Linker Flags" options under the "Linking" section.
Mine is as follows:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/lib/libstdc++.dylib
libc++ standard library support
Yep, I put exactly the path you mentioned in the "Other Linker Flags" options under the "Linking" section.
libc++ standard library support
Ok that was an error on my end. We have a hierarchy of projects, with mutliple project settings that are set in multiple places and the project file I was editing had its settings overriden by another one.
So I finally managed to make it work!
libc++ standard library support
Ok that was an error on my end... So I finally managed to make it work!
Glad to see that our recommendation worked for you :)