У меня clang 3.9 от https://llvm.org/releases/3.9.0/LLVM-3.9.0-win32.exe
clang version 3.9.0 (branches/release_39)
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
И gcc 6.2.0 (Mingw-w64)
gcc (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 6.2.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
На моем компьютере не установлен MSVC и нет Windows SDK. Мне нужна какая-то особенность clang, и я хотел заменить ее на gcc, а точнее на g ++, потому что я использую C ++.
Когда я пытаюсь скомпилировать простой файл, я получаю:
фатальная ошибка: строковый файл не найден
Означает ли это, что моя текущая установка clang не поддерживает mingw в Windows? По сути, все, что я хочу, — это использовать заголовки и библиотеки из моей установки mingw-w64. Искал решение и ничего не нашел. Я не знаю, что мне делать.
Означает ли это, что моя установка clang зависит от MSVC, которого у меня нет?
РЕДАКТИРОВАТЬ: Из комментария на этой странице: https://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt2/
Это больше не работает с последними двоичными файлами (3.7.1, 3.8, 3.9) из LLVM, потому что они были скомпилированы с помощью Visual Studio и для Visual Studio.
Вы можете установить полную версию Visual Studio 2015 (занимает около 8 ГБ) или установить «Microsoft Visual C ++ Build Tools 2015 Update 3», который содержит только инструменты командной строки из VS, а также стандартные файлы заголовков C ++, необходимые Clang.
Думаю, это все объясняет. Означает ли это, что мне нужна сборка mingw, чтобы она работала с mingw?
После установки более старой версии, построенной с использованием MinGW, то есть 3.7.0 RC3, все заработало.
Вы можете заметить разницу между версиями i686-pc-windows- gnu и i686-pc-windows- msvc.
Я думаю, что clang 3.9 тоже сработал бы, если бы они не сломали что-то в своем исходном коде, и если бы вы создали это сами. Было бы неплохо, если бы новейшая версия 3.9 работала и с MinGW. Я слишком ленив, чтобы пытаться построить сам.
РЕДАКТИРОВАТЬ: Есть несколько пакетов для mingw https://github.com/Alexpux/MINGW-packages, которые вы можете установить с помощью MSYS2, которые, похоже, поддерживают clang. Есть несколько коммитов, относящихся к 3.8 и 3.9.
Надеюсь, это поможет кому-то, у кого есть похожие проблемы.
Правильнее всего это …
Или, если вам нужен 64-битный вывод …
Clang определит расположение заголовков и библиотек по вашему пути. Убедитесь, что на вашем пути есть только та версия Mingw, на которую вы нацеливаетесь.
По умолчанию текущая версия Clang (на данный момент 5.0.0) нацелена на
x86_64-pc-windows-msvc
В качестве примера …
Вопрос был в том, как использовать его с заголовками mingw-w64, а не в том, как собрать для другой архитектуры. Некоторым это непонятно. Например, когда я начинал, у меня на компьютере не было msvc, но я пытался построить с
-msvc
в конце. Как вы говорите, последняя версия по умолчанию нацелена на msvc, и в то время это было моей проблемой. Не было простого способа просто выбрать использование gnu с их последним выпуском, поэтому у меня было 3 способа: перейти на более раннюю версию, использовать MSYS2 или собрать его самостоятельно. — person Konrad; 09.11.2017Это как использовать заголовки MinGW-w64. Если mingw установлен и находится в вашем пути, целевой параметр — это то, как заставить clang использовать заголовки, просто убедитесь, что вы выбрали правильную битовую версию для установленного mingw. — person Konrad; 09.11.2017
Я только что протестировал, Clang 3.9.0 также имеет такое поведение. — person Konrad; 09.11.2017
Интересно, что ваш ответ правильный и простой !. — person Konrad; 09.11.2017
Проверьте это с помощью clang 6.0.0 и последней версии MinGW-w64 (gcc 7.30). Приведенный выше код работает. — person Konrad; 29.03.2018
Имейте в виду, что если у вас установлена Visual Studio, Clang по умолчанию будет использовать заголовки Microsoft, если не указан целевой параметр. — person Konrad; 30.03.2018
clang
принимает только аргументы стиля gcc. Возможно, вы думаете оclang-cl
, том, который принимает аргументы в стиле msvc. — person Konrad; 20.08.2018Я думаю, что в Windows в официальных двоичных файлах
clang
иclang-cl
абсолютно одинаковы. Между прочим, когда вы говорите, что Clang будет определять расположение заголовков и библиотек по вашему пути .. Что он ожидает увидеть на пути? — person Konrad; 08.10.2019Не совсем.
clang
— это капля на замену gcc, с теми же аргументами и выводом объектных файлов COFF (по умолчанию gcc).clang-cl
, однако, представляет собой каплю на замену компилятору Microsoft Visual C ++, принимая те же аргументы и выводя объектные файлы MS-COFF (по умолчанию VC ++, которые, конечно, несовместимы с файлами COFF), за исключением того, что он также поддерживает C (Visual C ++ — это не компилятор C, это компилятор C ++, который принимает некоторые варианты поведения C). В остальном, я считаю, что это один и тот же компилятор. — person Konrad; 31.10.2020