Clang не видит базовые заголовки

Я попытался скомпилировать простой hello world в Fedora 20 с помощью Clang и получил следующий результат:

d.cpp: 1: 10: фатальная ошибка: файл iostream не найден

#include <iostream>

Я понятия не имею, как это решить.


person sweet_sugar    schedule 13.10.2014    source источник
comment
clang++ -v your_file.cpp, убедитесь, что показаны правильные подключаемые каталоги.   -  person    schedule 13.10.2014
comment
#include ... поиск начинается здесь: #include ‹...› поиск начинается здесь: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.1/../../ .. /../include/c++ / usr / local / include /usr/bin/../lib/clang/3.4/include / usr / include Конец списка поиска.   -  person sweet_sugar    schedule 13.10.2014
comment
Размещение здесь не поможет. Вы должны сами определить, находит ли компилятор правильные подключаемые каталоги. Если вы компилировали из исходного кода, убедитесь, что вы сделали make install. И добавьте каталоги на свой путь.   -  person    schedule 13.10.2014
comment
Как добавить путь к путям поиска clang?   -  person sweet_sugar    schedule 13.10.2014
comment
Эта проблема может легко возникнуть с clang, если вы измените версии gcc.   -  person o11c    schedule 13.10.2014
comment
@remyabel: iostream - заголовок стандартной библиотеки. Если он не работает без каких-либо специальных параметров, значит, компилятор установлен неправильно.   -  person Jan Hudec    schedule 14.10.2014
comment
@sweet_sugar: вопрос редактируемый. Пожалуйста, отредактируйте полный, точный вывод clang++ -v your_file.cpp в нем. В комментарии это сложно прочитать.   -  person Jan Hudec    schedule 14.10.2014
comment
Это пакет Fedora Clang или вы его собрали самостоятельно?   -  person rubenvb    schedule 14.10.2014
comment
-std=c++11 и, возможно, -stdlib=libc++ включены в строку?   -  person firda    schedule 14.10.2014


Ответы (6)


Пункт 3 решил проблему для меня.

1. Была такая же проблема, Fedora 21 :: clang 3.5.0:

clang++ -std=c++14 -pedantic -Wall test_01.cpp -o test_01 -v

2.

ignoring nonexistent directory "/usr/lib/gcc/i686-redhat-linux/4.9.2/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/bin/../lib/clang/3.5.0/include
 /usr/include
End of search list.
test_01.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>

3.

sudo yum install gcc-c++

4.

#include "..." search starts here:
#include <...> search starts here:
 /bin/../lib/gcc/i686-redhat-linux/4.9.2/../../../../include/c++/4.9.2
 /bin/../lib/gcc/i686-redhat-linux/4.9.2/../../../../include/c++/4.9.2/i686-redhat-linux
 /bin/../lib/gcc/i686-redhat-linux/4.9.2/../../../../include/c++/4.9.2/backward
 /usr/local/include
 /usr/bin/../lib/clang/3.5.0/include
 /usr/include
 /usr/lib/gcc/i686-redhat-linux/4.9.2/include
End of search list.
person user4823890    schedule 23.04.2015
comment
@Slizzered Я добавил clang ++ -std = c ++ 14, но получаю ошибку: error: недопустимое значение 'c ++ 14' в '-std = c ++ 14' - person Hamed_gibago; 18.05.2019
comment
Значит, clang использует системные заголовки, которые предоставляет gcc в каталоге /usr/include, верно? До сих пор не знал об этом явно относительно того, где clang получает свои системные включения или системные заголовки. - person jxramos; 13.12.2019

Это связано с тем, что g ++ не установлен, поэтому отсутствует libstdc ++.

Вы можете установить g ++ или, если предпочтительнее LLVM, установить LLVM libc ++ и указать, что вы хотите его использовать, например:

sudo apt-get install libc++-dev
clang++ -stdlib=libc++ <rest of arguments>

Вы можете связать / usr / bin / c ++ с компилятором по умолчанию:

ln -s /usr/bin/c++ /usr/bin/clang++-libc++

а затем скомпилировать, просто используя

$ c++ <args_as_usual>
person ArunasR    schedule 14.10.2014
comment
Я использую Fedora 20. Установлены g ++ и llvm, а также libc ++ :-) - person sweet_sugar; 14.10.2014
comment
@sweet_sugar Извините, я использую Mint и не знаю, как Fedora упаковывает вещи. В Debian заголовки LLVM находятся в libc ++ - dev, который отделен от libc ++ (двоичной библиотеки времени выполнения). - person ArunasR; 15.10.2014
comment
Для Fedora это пакеты libcxx и libcxx-devel. - person Isaac Woods; 31.08.2017

Похоже, вы должны указать в своей сборке clang параметр -stdlib. Один из -stdlib=libc++ или -stdlib=libstdc++, вероятно, будет работать.

Подробности по вашей теме:

Когда необходимо использовать флаг -stdlib = libstdc ++ ?

person Stepan Dyatkovskiy    schedule 17.04.2019
comment
Спасибо, что помогло! - person DeSpeaker; 19.03.2020
comment
вау, у меня это сработало. Благодарю. - person R4444; 17.07.2021

-stdlib = libstdc ++ решил это за меня. Вот моя полная конфигурация tasks.json:

{
"tasks": [
    {
        "type": "shell",
        "label": "clang++ build active file",
        "command": "clang++",
        "args": [
            "-std=c++11",
            "-stdlib=libstdc++",
            "hello.cpp",
            "-o",
            "hello.out",
            "--debug"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
],
"version": "2.0.0"
person eyesfree    schedule 22.10.2019

Для тех, кто ищет это в Google и у вас есть MacOS, вот решение, которое я нашел:

Добавьте следующее в ваш файл .bashrc / .zshrc

export CPLUS_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1

Это должно исправить.

person Eddy Ekofo    schedule 01.01.2021

Убедитесь, что у вас установлен libstdc ++, соответствующий последней версии установленного gcc. Кажется, что Clang идентифицирует последнюю установку gcc и просматривает только соответствующие каталоги для этой версии.

person ddiepo    schedule 11.02.2021