Лязг на винде - PullRequest
       51

Лязг на винде

23 голосов
/ 16 января 2012

Прежде всего, я следовал «Начало работы: создание и запуск 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 предоставляет чрезвычайно краткую информацию - я подумал, что кто-то может прояснить мне следующие вопросы:

  1. Насколько я понимаю, в Clang нет собственной стандартной библиотеки (наверное, stdc ++, не так ли?). Вот почему я должен использовать заголовки и библиотеки MinGW - я прав?
  2. В чем разница между сборкой Clang с помощью Visual Studio и MinGW?
  3. Нужно ли жестко кодировать включенные пути в clang/lib/Frontend/InitHeaderSearch.cpp или я могу пропустить его, а затем указать эти пути позже через опцию "-I", как я это сделал на скриншоте выше?

Ответы [ 2 ]

32 голосов
/ 16 января 2012

Если вы создадите Clang с MSVS, он автоматически найдет пути включения VS по умолчанию и извлечет эти заголовки.По этой причине заголовки libstdc ++ выдают ошибки: они импортируют функции C, которых нет в заголовках VS.Использование Clang для C ++ с VS на данный момент не допускается: вы получите сбои ссылок из-за отсутствия функциональности ABI (искажение имен и другие) в Clang.Если вы все еще хотите использовать MSVS Clang, не указывайте на заголовки MinGW.Он будет анализировать заголовки VS (включая C ++), он просто не сможет связать.


EDIT : я создал версию GCC для dw2 (только 32-битную), сопровождаемуюот Clang.Исключения работают в этой сборке, и теперь вы можете создавать настоящие C ++ с Clang в Windows. Получить версию 3.2 здесь .

1 голос
/ 04 марта 2013

Очевидный ответ: вы забыли отправить -fno-ms-compatibility в clang ++: P

  1. Вы правы.
  2. VC ++ - это цепочка инструментов GUI, MinGW - консоль символов.
  3. Нет, поскольку clang достаточно зрелый для общественного потребления, но все еще для стабилизации, поэтому пусть его команда разработчиков работает над кодом, иначе вы рискуете работать, что может стать потерянным островом.Я использую -I, как показывает ваш пример.

Я занимаюсь разработкой приложений для Windows с использованием VS и использую clang + CodeBlocks для совместного использования аспектов, нейтральных для домена платформы.

...