Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

STD linker error with Apple LLVM 4.1

Tags:

I've got a large static library in C++ with bits of Objective-C originally built for iOS (armv7).

I built a OS X (64-bit Intel x86_64) version of it, but as soon as I tried to use it in a OS X app project (targeted to Lion 10.7), tens of linker errors appeared, most of them about standard library symbols.

I know how to solve "my" linker problems, but the STD ones copied below are bugging me.

"std::basic_filebuf<char, std::char_traits<char> >::is_open() const" "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const" "std::basic_ios<char, std::char_traits<char> >::widen(char) const" "std::istream& std::istream::_M_extract<double>(double&)" "std::ostream::put(char)" "std::ostream::flush()" "std::ostream& std::ostream::_M_insert<void const*>(void const*)" "std::ostream& std::ostream::_M_insert<bool>(bool)" "std::ostream& std::ostream::_M_insert<double>(double)" "std::ostream& std::ostream::_M_insert<unsigned long>(unsigned long)" "std::ostream::operator<<(int)" "std::ostream::operator<<(short)" "std::string::_Rep::_M_destroy(std::allocator<char> const&)" "std::string::_Rep::_S_terminal" "std::string::_Rep::_S_empty_rep_storage" "std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)" "std::string::append(char const*, unsigned long)" "std::string::append(std::string const&)" "std::string::assign(std::string const&)" "std::string::reserve(unsigned long)" "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)" "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)" "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()" "std::basic_ofstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)" "std::basic_ofstream<char, std::char_traits<char> >::close()" "std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream()" "std::basic_ofstream<char, std::char_traits<char> >::~basic_ofstream()" "std::_List_node_base::hook(std::_List_node_base*)" "std::_List_node_base::unhook()" "std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::string const&, std::_Ios_Openmode)" "std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::_Ios_Openmode)" "std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()" "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)" "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()" "std::ios_base::Init::Init()" "std::ios_base::Init::~Init()" "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)" "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*, long)" "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)" "std::_Rb_tree_increment(std::_Rb_tree_node_base const*)" "std::_Rb_tree_increment(std::_Rb_tree_node_base*)" "std::__throw_logic_error(char const*)" "std::__throw_length_error(char const*)" "std::__throw_out_of_range(char const*)" "std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)" "std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)" "std::cerr" "std::cout" 

I checked my build settings, my project links to the standard library (-stdlib=libc++) and I can use std::cout without any problem in my main.cpp.

I changed the compiler in the build settings from Apple LLVM 4.1 to LLVM GCC 4.2 and the problem disappeared. I want to keep using Apple LLVM 4.1. How can I fix that?

Thanks!

like image 528
antho Avatar asked Oct 16 '12 18:10

antho


1 Answers

In iOS 7 I use a library for charts and have the same issue. In this case lib stdc++ does not resolve the issue.

I add the stdc++.6.dylib to my build phase and the symbols are found.

like image 172
gzfrancisco Avatar answered Sep 30 '22 06:09

gzfrancisco