clang 14.00: _GLIBCXX11_DEPRECATED_SUGGEST("std::bind");

Установил clang 14.0 с помощью пакета clang-toolchain от GNU/Guix. Я получаю ошибку использования устаревшей функции при попытке скомпилировать простой код:

      //build with: clang++ main.cpp
//main.cpp
#include <iostream>
int main() {
  std::cout << "hello world!" << std::endl;
}

Сообщение об ошибке:

      [Guix profile dir]/include/c++/backward/binders.h:130:6: error: expected ';' after class
    } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind");

Ошибка возникает независимо от того, какой заголовок STL включает код. Например, он терпит неудачу, когда <string>включается с тем же сообщением об ошибке.

Любая идея, как решить ошибку?

Обновление 1: похоже, это ошибка конфигурации. Это исчезает, если компиляция выполняется внутри среды контейнера Guix:

      guix environment --container clang-toolchain -- clang++ main.cpp -o main

Обновление 2:

[Это оказалось НЕПРАВИЛЬНЫМ. Это связано с отсутствием поддержки мультибиблиотек в gcc-toolchain]

Ошибка по-прежнему сохраняется при запуске того же кода в среде Guix с --pureвариант. Это означает, что ошибка не связана с настройкой среды.

Существует также более старый отчет об ошибке, посвященный той же проблеме: https://bugzilla.redhat.com/show_bug.cgi?id=1896076. Сообщение
об ошибке в баге можно воспроизвести при запуске тестового кода с помощью emscripten:

      emcc -o main.html main.cpp

Проблема в том, что ошибка уже исправлена ​​в Fedora 33?
Сейчас я на: Linux/fedora 5.17.4-200.fc35.x86_64 со средой Guix: guix describe --format=channels:

      (list (channel
        (name 'guix)
        (url "https://git.savannah.gnu.org/git/guix.git")
        (branch "master")
        (commit
          "59b91fdbcd7e1a88d1d54d392ce5d5fddd9d96d1")
        (introduction
          (make-channel-introduction
            "9edb3f66fd807b096b48283debdcddccfea34bad"
            (openpgp-fingerprint
              "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"))))
      (channel
        (name 'flat)
        (url "https://github.com/flatwhatson/guix-channel.git")
        (branch "master")
        (commit
          "f43c67e47f1ca83d045f35c31772c5e4eb64b2a2")
        (introduction
          (make-channel-introduction
            "33f86a4b48205c0dc19d7c036c85393f0766f806"
            (openpgp-fingerprint
              "736A C00E 1254 378B A982  7AF6 9DBE 8265 81B6 4490")))))

Обновление 3: кажется, что последняя версия ломается при установке вместе с . То есть в том же профиле Guix. Понижение версии gcc-toolchain до версии 10.3.0 устранило ошибку.

Проблема может быть воспроизведена с помощью:

      guix shell clang-toolchain@14.0.0 gcc-toolchain@11.2.0 --container -- clang++ main.cpp  

Выход:

      In file included from main.cpp:1:
In file included from /gnu/store/../profile/include/c++/iostream:39:
In file included from /gnu/store/../profile/include/c++/ostream:38:
In file included from /gnu/store/../profile/include/c++/ios:42:
In file included from /gnu/store/../profile/include/c++/bits/ios_base.h:41:
In file included from /gnu/store/../profile/include/c++/bits/locale_classes.h:40:
In file included from /gnu/store/../profile/include/c++/string:48:
In file included from /gnu/store/../profile/include/c++/bits/stl_function.h:1407:
/gnu/store/../profile/include/c++/backward/binders.h:130:6: error: expected ';' after class
    } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind");
     ^
/gnu/store/../profile/include/c++/backward/binders.h:130:7: error: C++ requires a type specifier for all declarations
    } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind");
      ^
/gnu/store/../profile/include/c++/backward/binders.h:165:6: error: expected ';' after class
    } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind");
     ^
/gnu/store/../profile/include/c++/backward/binders.h:165:7: error: C++ requires a type specifier for all declarations
    } _GLIBCXX11_DEPRECATED_SUGGEST("std::bind");

Понижение gcc до [email protected][email protected][email protected] :

      guix shell clang-toolchain@14.0.0 gcc-toolchain@10.3.0 --container -- clang++ main.cpp  

Вывод: создается ожидаемый файл (a.out)

0 ответов

Другие вопросы по тегам