Compiling with Clang using Libc++ undefined references

37,671

Solution 1

I believe libc++ doesn't support all exception functions yet. See the status page:

http://libcxxabi.llvm.org/spec.html

You could probably link against gnu's libstdc++

Solution 2

Here's what works for me with the Ubuntu Vivid packages for clang and libc++:

clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++

It is important that the object files come before the -l flags, e.g. when you use exceptions. Obviously, this still will not link if you use libraries compiled against libstdc++ and use any STL types in those interfaces.

Solution 3

This seems like you are using exception handling, but it isn't enabled in the compiler. Try passing -fexceptions to the commandline.

Share:
37,671
norcalli
Author by

norcalli

Updated on June 23, 2021

Comments

  • norcalli
    norcalli almost 3 years

    The first couple are too long to reference. I get this error when I try to compile clang++ -stdlib=libc++ ../main.cc ... with clang and libc++ from the SVN.

    error: undefined reference to 'typeinfo for char const*'
    error: undefined reference to '__cxa_allocate_exception'
    error: undefined reference to '__cxa_throw'
    /tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_begin_catch'
    /tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_rethrow'
    /tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_end_catch'
    /tmp/cc-pbn00y.o(.eh_frame+0xbd3): error: undefined reference to '__gxx_personality_v0'
    

    SOLUTION: Thanks to one of the answers, I know the solution. libc++ can't be used by itself like libstdc++, it has to be linked along with libc++abi. However, libc++abi isn't complete yet, so using libc++ seems to be a little incomplete for the moment, but it is still my first choice when it completes.

    UPDATE 5/26/2012: libc++abi is now complete for C++ and I have been using clang++ as follows successfully clang++ -std=c++11 -stdlib=libc++ -lc++abi.

  • norcalli
    norcalli over 12 years
    Well slap me in the face and call me nancy, that looks like it. Can I link against both of them and cover the spectrum?
  • Arvid
    Arvid over 12 years
    that might be possible, if you're very careful to specify the libraries in the right order to your linker, and make sure you understand how your linker treats the order of objects and how it resolves symbols that might be defined in multiple places.
  • norcalli
    norcalli over 12 years
    OK, so I downloaded libc++abi and linked it in and got all the errors gone except for typeinfo for char const* and __gxx_personality_v0.
  • Nate Parsons
    Nate Parsons about 10 years
    Forgive my ignorance, but how do you specify this?
  • Nate Parsons
    Nate Parsons about 10 years
    Nevermind, it seems to be -stdlib=libc++ but what worked for me was -lstdc++.6