desktop-packages team mailing list archive
-
desktop-packages team
-
Mailing list archive
-
Message #157685
[Bug 1488254]
(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
References