Кланг в Windows
Прежде всего, я следил за "Начало работы: создание и запуск Clang" . В частности, я построил его в соответствии с разделом "Использование Visual Studio". Другими словами, я создал его с помощью Visual Studio 2010.
Во-вторых, я вручную установил пути включения и библиотеки в дистрибутив MinGW:
![enter image description here]()
Простая программа, которую я пытаюсь скомпилировать:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
Я получаю следующие отзывы от компилятора:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41:
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace
using ::fgetws;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace
using ::fputws;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace
using ::getwc;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace
using ::getwchar;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace
using ::putwc;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:157:11: error: no member named 'putwchar' in the global namespace
using ::putwchar;
~~^
6 errors generated.
Build error occurred, build is stopped
Time consumed: 646 ms.
Очевидный вопрос: зачем я это получаю?
Кроме того, я хотел бы узнать более подробную информацию, и поскольку сайт Clang предоставляет чрезвычайно краткую информацию - я думал, что кто-то может прояснить мне следующие вопросы:
- Насколько я понимаю, Clang не имеет своей собственной стандартной библиотеки (stdС++, я думаю, не так ли?). Вот почему я должен использовать заголовки и библиотеки MinGW - я прав?
- В чем разница между построением Clang с Visual Studio и MinGW?
- Нужно ли мне жестко кодировать пути в
clang/lib/Frontend/InitHeaderSearch.cpp
, или я могу пропустить его и скорее указать эти пути позже через параметр "-I", как показано на скриншоте выше?
Ответы
Ответ 1
Если вы создадите Clang с помощью MSVS, он автоматически будет искать пути включения VS по умолчанию и вытащить эти заголовки. Именно по этой причине заголовки libstdС++ создают ошибки: они импортируют функции C, отсутствующие в заголовках VS. Использование Clang для С++ с VS на данный момент является не-go: вы получите сбои ссылок из-за отсутствия функций ABI (название и другие) в Clang. Если вы все еще хотите использовать MSVS Clang, не указывайте его на заголовки MinGW. Он будет анализировать заголовки VS (включая С++), он просто не сможет ссылаться.
EDIT. Я построил версию GCC (только 32-разрядную версию) dw2, сопровождаемую Clang. Исключения работают в этой сборке, поэтому вы можете создавать реальные С++ файлы с Clang теперь в Windows. Получить версию 3.2 здесь.
Ответ 2
Очевидный ответ: вы забыли отправить -fno-ms-совместимость с clang++: P
- Вы правы.
- VС++ - это инструментальная цепочка GUI, MinGW - консоль символов.
- Нет, поскольку clang достаточно зрел для общественного потребления, но все еще стабилизируется, поэтому пусть его команда разработчиков работает над кодом, иначе вы рискуете работать, которая может стать потерянным островом. Я использую -I, как показывает ваш пример.
Я делаю Windows app dev с помощью VS и использую clang + CodeBlocks для совместного использования аспектов, нейтральных для домена платформы.