(In reply to comment #40) > So you're saying there is a use case to compile everything with clang and > libstdc++?
Unfortunately, no. A reasonably common scenario will also be to use libc++ on user code while having libstdc++ used on the core libraries (say, boost), and them two interface appropriately, statically and dynamically linked. Same with RT and libgcc. Linux systems use GNU for everything as default. All packages are compiled with GCC, Glibc, binutils, libstdc++, etc. Users installing packages will end up getting GCC-mangled libraries. But I still want to use Clang there, for special cases, performance reasons, diagnostics, etc. So, while in FreeBSD and Apple environments they can get rid of the GNU side, Linux is a lot more fragmented. For better or worse, we still need to be compatible with GCC 5 abi at all levels. Clang, libc++, compiler- rt need to all be aware (not necessarily change much) of this new ABI and what effects it'll have on them. Some Linux distros are trying to change the compiler, but that has proven a lot harder than it should, due to decades abusing of the same bugs in one compiler alone. The new ABI change is just yet another added to the pile. -- You received this bug notification because you are a member of Desktop Packages, which is subscribed to llvm-toolchain-3.6 in Ubuntu. https://bugs.launchpad.net/bugs/1488254 Title: clang++ no longer ABI-compatible with g++ Status in LLVM: Confirmed Status in llvm-toolchain-3.6 package in Ubuntu: Confirmed Bug description: $ cat foo.cc #include <string> std::string hello = "Hello, world!\n"; $ cat bar.cc #include <string> #include <iostream> extern std::string hello; int main() { std::cout << hello; return 0; } $ g++ -c foo.cc && g++ foo.o bar.cc && ./a.out Hello, world! $ clang++ -c foo.cc && clang++ foo.o bar.cc && ./a.out Hello, world! $ g++ -c foo.cc && clang++ foo.o bar.cc && ./a.out /tmp/bar-34fb23.o: In function `main': bar.cc:(.text+0x14): undefined reference to `hello' clang: error: linker command failed with exit code 1 (use -v to see invocation) $ clang++ -c foo.cc && g++ foo.o bar.cc && ./a.out /tmp/ccqU38Mh.o: In function `main': bar.cc:(.text+0x5): undefined reference to `hello[abi:cxx11]' collect2: error: ld returned 1 exit status In practice, this means that many programs using C++ libraries other than libstdc++ fail to compile with clang++. For example, mosh fails with undefined references to google::protobuf::internal::empty_string_, google::protobuf::MessageLite::InitializationErrorString() const, and google::protobuf::MessageLite::SerializeAsString() const. To manage notifications about this bug go to: https://bugs.launchpad.net/llvm/+bug/1488254/+subscriptions -- Mailing list: https://launchpad.net/~desktop-packages Post to : [email protected] Unsubscribe : https://launchpad.net/~desktop-packages More help : https://help.launchpad.net/ListHelp

