Clang 3.1 + libc++ Compile Error
Asked Answered
G

1

3

I've built and installed (under the prefix ~/alt) LLVM-Clang trunk (23 apr 2012) successfully using GCC-4.6 on Ubuntu 12.04 and in turn libc++ using this Clang-build. When I want to use it I have to supply both -lc++ and -libstdc++ as follows

/home/per/alt/bin/clang -x c++ -I/home/per/alt/include/v1 -L/home/per/alt/lib -std=gnu++0x -g -Wall ~/f.cpp -lm -lc++ -lstdc++ -lpthread -o f

to compile f.cpp containing

#include <iostream>

using std::cout;
using std::endl;

int main(int argc, const char * argv[]) {
    cout << "sxx" << endl;
    return 0;
}

If I omit -lstdc++ I get the link error

/home/per/alt/include/v1/ostream:989: error: undefined reference to '__cxa_begin_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/tmp/f-4l9mgl.o(.eh_frame+0xd3): error: undefined reference to '__gxx_personality_v0'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Compilation exited abnormally with code 1 at Tue Apr 24 13:59:22

Shouldn't libc++ be a full replacement for libstdc++?

Generalship answered 24/4, 2012 at 11:52 Comment(2)
The signature of main is incorrect, I am surprised it's accepted.Witchery
Nordlöw, what is your cpu arch? Is it arm? libc++ has not implemented some __cxa* on ARM: libcxxabi.llvm.org/spec.htmlProsecution
D
7

libcxx doesn't come with the ABI layer... that's why libcxxabi exists.

In theory you should be able to link to libcxxabi.

In practice you might want to link to libsupc++ or libcxxrt

There's some discussion recently on the newsgroup, I'm afraid the solutions is complicated and in flux: http://thread.gmane.org/gmane.comp.compilers.clang.devel/19782

Destinee answered 25/4, 2012 at 15:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.