[Bug 1510042] Re: clang++ no longer ABI-compatible with g++

Daniel van Vugt daniel.van.vugt at canonical.com
Wed Aug 3 07:46:09 UTC 2016


This should have been done as bug 1488254, but glad to have a fix.

** Summary changed:

- linking against -ljsoncpp fails with clang
+ clang++ no longer ABI-compatible with g++

-- 
You received this bug notification because you are a member of Ubuntu
Sponsors Team, which is subscribed to a duplicate bug report (1488254).
https://bugs.launchpad.net/bugs/1510042

Title:
  clang++ no longer ABI-compatible with g++

Status in llvm-toolchain-3.8 package in Ubuntu:
  Fix Released
Status in llvm-toolchain-3.8 source package in Xenial:
  Fix Released
Status in llvm-toolchain-3.8 package in Debian:
  Confirmed

Bug description:
  SRU acceptance criteria:  the example successfully links.

  On updating ubuntu from 15.04 to 15.10, I see changes in how clang
  resolves references to some libraries. (I think this is not an ubuntu
  question but rather a clang question and that I've missed some
  subtlety on how clang has recently changed.  I suspect initially that
  this is related to the gcc-5 ABI changes, but I'm not sure how to
  proceed.)

  Here's a tiny test example designed only to tickle the phenomenon:

  #include <jsoncpp/json/json.h>
  #include <iostream>

  int main(int argc, char *argv[]) {
      std::cout << argc << " - " << argv[0] << std::endl;
      Json::Reader reader;
      Json::Value root;
      reader.parse("", root, false);
      std::cout << reader.getFormattedErrorMessages() << std::endl;
      return 0;
  }

  If I compile like this

  clang++ -ggdb3 -Wall -Wextra -std=c++14 -o json_test json_test.cc
  -ljsoncpp

  /tmp/json_test-680d3a.o: In function `main':
  /tmp/json_test.cc:10: undefined reference to `Json::Reader::getFormattedErrorMessages() const'
  clang: error: linker command failed with exit code 1 (use -v to see invocation)

  And yet the definition appears to be present:

  jeff at birdsong:src $ objdump -TC /usr/lib/x86_64-linux-gnu/libjsoncpp.so | grep getFormatted
  000000000000e190 g    DF .text  00000000000004d2  Base        Json::OurReader::getFormattedErrorMessages[abi:cxx11]() const
  000000000000dc70 g    DF .text  00000000000004d2  Base        Json::Reader::getFormattedErrorMessages[abi:cxx11]() const
  jeff at birdsong:src $

  The abi:cxx11 suggests I might at least try this

  clang++ -ggdb3 -Wall -Wextra -std=c++11 -o json_test json_test.cc
  -ljsoncpp

  but same error. On the other hand, this works fine:

  g++ -ggdb3 -Wall -Wextra -std=c++14 -o json_test json_test.cc
  -ljsoncpp

  Fwiw, here's version info:

  jeff at birdsong:tmp $ g++ --version
  g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
  Copyright (C) 2015 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  jeff at birdsong:tmp $ clang++ --version
  Ubuntu clang version 3.6.2-1 (tags/RELEASE_362/final) (based on LLVM 3.6.2)
  Target: x86_64-pc-linux-gnu
  Thread model: posix
  jeff at birdsong:tmp $

  ProblemType: Bug
  DistroRelease: Ubuntu 15.10
  Package: libjsoncpp-dev 0.10.5-1
  ProcVersionSignature: Ubuntu 4.2.0-16.19-generic 4.2.3
  Uname: Linux 4.2.0-16-generic x86_64
  ApportVersion: 2.19.1-0ubuntu3
  Architecture: amd64
  CurrentDesktop: i3
  Date: Mon Oct 26 12:00:40 2015
  Dependencies:
   gcc-5-base 5.2.1-22ubuntu2
   libc6 2.21-0ubuntu4
   libgcc1 1:5.2.1-22ubuntu2
   libjsoncpp0v5 0.10.5-1
   libstdc++6 5.2.1-22ubuntu2
  EcryptfsInUse: Yes
  InstallationDate: Installed on 2015-10-23 (2 days ago)
  InstallationMedia: Ubuntu 15.04 "Vivid Vervet" - Release amd64 (20150422)
  SourcePackage: libjsoncpp
  UpgradeStatus: Upgraded to wily on 2015-10-23 (2 days ago)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-3.8/+bug/1510042/+subscriptions



More information about the Ubuntu-sponsors mailing list