c++ - linking with clang++ on OS X generates lots of symbol not found errors -


i'm trying compile c++ code (including c++11 features) on os x 10.8 using clang++ compiler. have makefile generates object files ok, on command:

clang++  -o analysis.so -shared datafile.o cr39datafile.o 

i tons of errors symbol(s) not found architecture x86_64. code works fine on *nix system using g++ , changing compiler flags appropriately c++11 support. compile *.o doing like:

clang++ -c -wall -std=c++11 -stdlib=libc++ -i../src ../src/datafile.cc 

edit: output of linking command is:

clang++  -o analysis.so -shared datafile.o cr39datafile.o undefined symbols architecture x86_64: "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char const*, unsigned long, unsigned long) const", referenced from: cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char, unsigned long) const", referenced from: cr39datafile::trim(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const", referenced from: cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from: std::__1::vector<frame*, std::__1::allocator<frame*> >::__append(unsigned long) in cr39datafile.o std::__1::vector<std::__1::vector<frame*, std::__1::allocator<frame*> >*, std::__1::allocator<std::__1::vector<frame*, std::__1::allocator<frame*> >*> >::__append(unsigned long) in cr39datafile.o "std::__1::__vector_base_common<true>::__throw_out_of_range() const", referenced from: std::__1::vector<std::__1::vector<frame*, std::__1::allocator<frame*> >*, std::__1::allocator<std::__1::vector<frame*, std::__1::allocator<frame*> >*> >::at(unsigned long) in cr39datafile.o std::__1::vector<frame*, std::__1::allocator<frame*> >::at(unsigned long) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::erase(unsigned long, unsigned long)", referenced from: cr39datafile::trim(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*)", referenced from: cr39datafile::cr39datafile() in cr39datafile.o cr39datafile::clear() in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::insert(unsigned long, unsigned long, char)", referenced from: cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::resize(unsigned long, char)", referenced from: cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::reserve(unsigned long)", referenced from: cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from: datafile::read(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in datafile.o datafile::write(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in datafile.o std::__1::thread::thread<bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), datafile*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, void>(bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)&&, datafile*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&) in datafile.o cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o cr39datafile::write_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o cr39datafile::write_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, float, float, float, float, float, float, float, float, float) in cr39datafile.o cr39datafile::write_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, float, float, float, float, float) in cr39datafile.o ... "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, std::__1::allocator<char> const&)", referenced from: cr39datafile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from: datafile::~datafile() in datafile.o datafile::read(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in datafile.o datafile::write(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in datafile.o std::__1::thread::thread<bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), datafile*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, void>(bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)&&, datafile*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&) in datafile.o void* std::__1::__thread_proxy<std::__1::tuple<bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), datafile*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(void*) in datafile.o std::__1::__tuple_leaf<2ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::~__tuple_leaf() in datafile.o cr39datafile::cr39datafile() in cr39datafile.o ... "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from: cr39datafile::set_file_path(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o cr39datafile::set_file_auxpath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in cr39datafile.o "std::__1::__thread_struct::__thread_struct()", referenced from: void* std::__1::__thread_proxy<std::__1::tuple<bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), datafile*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(void*) in datafile.o "std::__1::__thread_struct::~__thread_struct()", referenced from: std::__1::__thread_specific_ptr<std::__1::__thread_struct>::reset(std::__1::__thread_struct*) in datafile.o "std::__1::__thread_local_data()", referenced from: void* std::__1::__thread_proxy<std::__1::tuple<bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), datafile*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(void*) in datafile.o "std::__1::__throw_system_error(int, char const*)", referenced from: std::__1::thread::thread<bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), datafile*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, void>(bool (datafile::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)&&, datafile*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&) in datafile.o "std::__1::thread::~thread()", referenced from: datafile::cleanup_file_io() in datafile.o ld: symbol(s) not found architecture x86_64 clang: error: linker command failed exit code 1 (use -v see invocation) make: *** [analysis.so] error 1 

i suspect issue because of 2 c++ runtime libraries available under os x. use following link dynamic library:

clang++ -stdlib=libc++ -o analysis.dylib -shared datafile.o cr39datafile.o 

(the -stdlib=libc++ being key difference). think default c++ runtime gnu implementation confusing linker compiled libc++ implementation.


Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -