16.04 clang: плохой выбор gcc toolchain

У меня две системы 16.04 с gcc (5.4.0 и 6.0.0) и clang 3.8 (1: 3.8-33ubuntu3.1). В первой системе clang успешно компилирует код C ++; с добавлением -v, основными выходными частями являются:

Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
[...]
#include <...> search starts here:
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/backward
 /usr/local/include
 /usr/lib/llvm-3.8/bin/../lib/clang/3.8.0/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

Но, в другой системе, он терпит неудачу; verbose output показывает

Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0

Но GCC6 в этой версии не содержит заголовков, поэтому компиляция не выполняется:

#include <...> search starts here:
 /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0/../../../../include/c++
 /usr/local/include
 /usr/lib/llvm-3.8/bin/../lib/clang/3.8.0/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
In file included from TimeHelper.cc:1:
./TimeHelper.hh:4:10: fatal error: 'cstdint' file not found
#include <cstdint>

Заголовок присутствует в /usr/include/c++/5/, но этот путь не указан здесь. (libstdc ++ - 5-dev установлен.)

Системы не идентичны, но оба бренда свежие (обновлено сегодня).

Как узнать, что является источником проблемы? [!d5 ]

Является ли предпочтительная инструментальная цепочка жестко подключена или предлагается в файле конфигурации?

NB попытаться явно указать --gcc-toolchain на значение, подобное /usr/lib/gcc/x86-64-linux-gnu/5, сбой: кажется, что clang не распознает каталог как путь установки GCC. В отличие от этого, для указания целевого каталога ручной сборки GCC успешно (но я хочу, чтобы он работал по умолчанию).

1
задан 29 March 2017 в 13:53

1 ответ

На компьютере, который работает:

$ find /usr/include/c++/ -name cstdint
/usr/include/c++/5/tr1/cstdint
/usr/include/c++/5/cstdint
$ dpkg -S /usr/include/c++/5/cstdint
libstdc++-5-dev:amd64: /usr/include/c++/5/cstdint

Итак, он находится в libstdc++-5-dev.

http://packages.ubuntu.com/xenial/libstdc++-5-dev

http://packages.ubuntu.com/xenial/libstdc++-5-dev

Давайте посмотрим на libstdc++-6-dev, затем:

http://packages.ubuntu.com/zesty/libstdc++-6-dev

http://packages.ubuntu.com/zesty/libstdc++-6-dev [!d8 ]

...
/usr/include/c++/6/cstdint
...
...
/usr/include/c++/6/tr1/cstdint
...
0
ответ дан 23 May 2018 в 00:10
  • 1
    yep, libstdc ++ - 5-dev, установленный на обоих хостах. Я не рассматриваю установку пакетов из более нового вкуса в качестве решения. – Netch 29 March 2017 в 15:33
  • 2
    Итак, почему у вас есть пакеты с более новым вкусом на второй машине? – Velkan 29 March 2017 в 15:42
  • 3
    У меня нет. Нет libstdc ++ - 6-dev. Есть gcc-6-base: {amd64, i386}, которые являются запасами в xenial. – Netch 29 March 2017 в 15:57

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

Похожие вопросы: