desktop-packages team mailing list archive
-
desktop-packages team
-
Mailing list archive
-
Message #157683
[Bug 1488254]
(In reply to comment #38)
> I said *tagged* return types, i.e. only those which need to break the ABI
> anyway.
Good point. Thanks for the distinction.
> The new ABI requires the full gcc abi-tag support to be compatible with
> gcc. If you compile everything with clang and disable dual ABI support
> you can get away with less, but what is the point? Just use the clang
> libc++ instead, which requires no changes.
I'm afraid it's not that simple. GNU libraries are the default on all
Linux (and other) distributions, and mixing libc++ with libstdc++ is
bound to create at least as many problems as it solves.
Moreover, FreeBSD had to take many short-cuts to get rid of libstdc++ on
the base system, including making symlinks named after GNU libraries and
tools to LLVM libraries and tools, and the mapping is NOT 1-to-1. See
the libc++ + compiler-rt + libunwind vs. libgcc + libgcc_s + libgcc_eh
connundrum.
We need libc++ to work on the supported architectures with and without
GNU libraries. Getting rid of the GNU counterparts is out of the
question for any practical purpose.
--
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