Почему я не могу скомпилировать эту программу с помощью clang?

Я скачал сборку моментального снимка Windows с здесь. Я просто запускаю этот исполняемый файл и пишу следующую простую программу на C++

#include <iostream>
int main()
{
     std::cout<<"Welcome to Clang\n";
}

clang++ 999.cpp

999.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

Что здесь происходит не так? Что мне не хватает? Что мне нужно сделать, чтобы я мог успешно компилировать свои программы на C и C++ в Windows с помощью clang?


person Destructor    schedule 04.07.2015    source источник
comment
Какую ОС вы используете? Может быть неудачная установка? У вас есть файл iostream где-нибудь в системе?   -  person parapura rajkumar    schedule 04.07.2015
comment
@parapurarajkumar: окна 7.   -  person Destructor    schedule 04.07.2015


Ответы (2)


Платформа Windows не поддерживает стандартную библиотеку C++ Clang: http://libcxx.llvm.org/

Вот почему вы не можете просто скомпилировать этот код в Windows: он не находит заголовки, на которые вы ссылаетесь.

Изменить:

Однако, следуя замечанию Тома, вы можете указать для clang цель сборки:

clang -target i686-pc-windows-win32 ....

Когда указана цель win32, clang будет использовать библиотеку msvc, если она установлена, и если переменная среды INCLUDE не была установлена ​​в другое место.

Однако обратите внимание, что на веб-сайте llvm содержится заявление об отказе от ответственности:

Clang в основном работает в Windows, но в настоящее время не понимает все расширения Microsoft для C и C++. Из-за этого clang не может анализировать стандартную библиотеку C++, входящую в состав Visual Studio, а также части пакета SDK для платформы Windows. Однако большинство стандартных программ на C компилируются.

person Christophe    schedule 04.07.2015

У вас должна быть установлена ​​Visual Studio.

Clang использует свои библиотеки и заголовки.

person Thomas    schedule 05.07.2015
comment
Я представляю, что может. Но я подозреваю, что вам нужно что-то сделать, чтобы заставить его работать таким образом: я установил msvc и попробовал clang, но получаю такие же ошибки, как и op - person Christophe; 05.07.2015
comment
@Christophe: Нет, с какими библиотеками вы бы тогда связались ...? Вы должны либо выбрать цель Visual Studio, либо цель MinGW. Убедитесь, что вашей целью является MSVC, проверьте с помощью '-v'. - person Thomas; 05.07.2015
comment
@Tom: с -v он показал, что параметры по умолчанию ищут библиотеки mingw. Так что есть еще кое-что, что нужно сделать, чтобы запустить его, и llvm не дает никаких гарантий, что он действительно будет работать с библиотеками MSVC. Но спасибо за подсказку. - person Christophe; 05.07.2015
comment
@Christophe: Clang действительно работает с библиотеками MSVC, многие люди работают над этим, в то время как никто больше не заботится о цели MinGW. Я просматриваю репозитории llvm-mirror/clang и llvm-mirror/llvm на GitHub, и, насколько я вижу, в clang вложено много усилий, чтобы заставить clang правильно работать с библиотеками и заголовками MSVC, особенно от Google. Они хотят избавиться от MSVC в пользу Clang для Chrome. Дополнительные сведения см. в разделе clang.llvm.org/docs/MSVCCompatibility.html. - person Thomas; 06.07.2015
comment
@Christophe: я не знаю точную тройку MSVC, но вам может повезти с чем-то вроде этого: clang++ -target i686-pc-win32-msvc <src.cpp> [...]. Возможно, ваш clang был создан с помощью MinGW вместо MSVC, что приведет к тому, что по умолчанию он будет ориентироваться на MinGW, а не на MSVC. - person Thomas; 06.07.2015
comment
спасибо за этот интересный вклад. Я скачал предварительно скомпилированную версию. Несколько тестов, которые я провел в Windows с правильной целью, сработали. Из-за их отказа от ответственности я подумал, что это удача. Я понимаю, что он должен работать больше и больше. Но почему они улучшают компилятор для работы с библиотеками msvc вместо улучшения переносимости libc++? - person Christophe; 06.07.2015
comment
@Christophe: я думаю, что уже можно использовать libc++ в Windows — кроме заголовка <thread>, для которого потребуется порт pthreads. Я думаю, что правильный порт libc++ последует, как только Clang и LLD достигнут 100% совместимости в Windows. - person Thomas; 06.07.2015