Announcement

Collapse
No announcement yet.

Arch Linux Switches To The New C++ ABI

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Arch Linux Switches To The New C++ ABI

    Phoronix: Arch Linux Switches To The New C++ ABI

    Arch Linux has switched over to using the new C++ ABI of GCC 5...

    Phoronix, Linux Hardware Reviews, Linux hardware benchmarks, Linux server benchmarks, Linux benchmarking, Desktop Linux, Linux performance, Open Source graphics, Linux How To, Ubuntu benchmarks, Ubuntu hardware, Phoronix Test Suite

  • #2
    The real fun will begin once people start mixing proprietary software with new c++ abi packages. I wonder how many things might break.

    Comment


    • #3
      One side effect is that thanks to this dual ABI clang++ becomes mostly unsuable, see https://bugs.debian.org/cgi-bin/bugr...cgi?bug=797917

      Comment


      • #4
        yoshi314, it could be a problem, but only if it tries to use both ABIs in one process. So far, so good.

        gerddie, https://projects.archlinux.org/svnto...=packages/llvm

        Comment


        • #5
          Originally posted by Scimmia View Post
          yoshi314, it could be a problem, but only if it tries to use both ABIs in one process. So far, so good.
          Nope, that's not a problem, because the functions have different mangled names. If a function/method uses the new ABI this is either directly visible in the mangled parameter name, e.g.
          void foo(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) vs
          void foo(std::basic_string<char, std::char_traits<char>, std::allocator<char>>),

          or from the ABI tag, e.g.
          bar[abi:cxx11]() vs
          bar().

          The latter variant is used when e.g. the return type is ABI dependent (return types are not part of the mangled name), or a parameter is ABI dependent, for example a class embedding a std::string.

          Comment


          • #6
            Thanks, I'll try this on my Gentoo box.

            Comment


            • #7
              I haven't updated yet, but I do wonder if it'll break Vivaldi, for it isn't within the repos and is one of the few AUR programs I actually use.

              Comment


              • #8
                Nope, doesn't work. I get less linking errors, but some are still there:

                Code:
                ...  undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform[abi:cxx11](char const*, char const*) const
                ... undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary[abi:cxx11](char const*, char const*) const

                Comment


                • #9
                  It would have been better if GCC devs bumped the .so version number on libstdc++.

                  Comment


                  • #10
                    Originally posted by Vaporeon View Post
                    It would have been better if GCC devs bumped the .so version number on libstdc++.
                    What would that have helped?

                    The new libstdc++ is dual-ABI, and works equally well in either cases. The problem are all other APIs that has std::string arguments or return values, those all need to agree on the std::string version (or do dual-ABI themselves).

                    Comment

                    Working...
                    X