Clang "привет, мир!" ошибки ссылок в окнах

Я только что загрузил источники CLang, создал рабочее пространство Visual С++ 10 IDE, используя CMake, и построил все из Visual С++ 10.0 (express).

Теперь я получаю кучу ошибок компоновщика в мире привет:

d:\dev\test> type con >foo.cpp
#include <iostream>
using namespace std;
int main() { cout << "Hello, cling-clong world!" << endl; }
^Z

d:\dev\test> clang++ foo.cpp
foo-839435.o : error LNK2019: unresolved external symbol __ZSt4cout referenced in function _main
foo-839435.o : error LNK2019: unresolved external symbol __ZdlPv referenced in function __ZNSt14error_categoryD0Ev
foo-839435.o : error LNK2019: unresolved external symbol __ZSt18uncaught_exceptionv referenced in function __ZNSo6sentry
D2Ev
foo-839435.o : error LNK2019: unresolved external symbol ___cxa_rethrow referenced in function __ZNSt8ios_base5clearEib
foo-839435.o : error LNK2019: unresolved external symbol ___cxa_allocate_exception referenced in function __ZNSt8ios_base5clearEib
foo-839435.o : error LNK2019: unresolved external symbol ___cxa_throw referenced in function __ZNSt8ios_base5clearEib
foo-839435.o : error LNK2019: unresolved external symbol __ZSt17iostream_categoryv referenced in function __ZSt15make_er

Итак, что я могу с этим сделать?

Ответ 1

Если вы хотите поэкспериментировать с Clang на Windows, я предлагаю использовать встроенную версию MinGW, например, ту, которую я предоставляю здесь (или самостоятельно ее создать с помощью вашей любимой инструментальной комбинации MinGW):

Вам понадобятся пакеты gcc и clang (без суффикса linux/mac/cygwin) и извлеките их в тот же каталог. Clang использует gcc для связи и может ссылаться на GCC libstdС++, в значительной степени предоставляя вам доступ к стандартной библиотеке С++. Исключения работают для 32-разрядной версии. Однако мне не повезло с информацией об отладке.

Проводится работа над улучшением поддержки MS Clang, но это медленно развивающаяся задача.

Ответ 2

Я думаю, что здесь есть недоразумение.

Clang (медленно) учат тому, как разбирать заголовки MFC. Насколько я знаю, François Pichet посвящен одному в этом проекте, но есть всего несколько ошибок во всей партии заголовков (!), И, очевидно, стандартная библиотека, поставляемая с партированием VС++, была закончена давно.

Однако это касается генерации АСТ, а не генерации кода. В настоящее время Clang не может правильно сгенерировать код для взаимодействия с библиотеками VС++. Мало того, что имя не работает неполным, но ABI все еще формируется (за последние 2 месяца было множество исправлений, чтобы получить правильное дополнение/выравнивание), и существует давняя проблема с исключениями.

Если вы хотите использовать Clang для Windows, вы должны использовать MinGW или MinGW64, см. ответ ruben.

Ответ 3

В отличие от MinGW gcc, clang не включает библиотеку glibc, поэтому по умолчанию у нее нет стандартной библиотеки или вообще ничего. Я не знаю, как использовать стандартную библиотеку Visual С++ с ней, но это довольно ясно из того, что вы публикуете, что по умолчанию он создает символы типа gcc, поэтому вам нужно использовать его с glibc или newlib...

И либо вы указываете путь libary с -Ldirectory к файлам .lib(или .a для glibc), либо помещаете их в один из шаблонов поиска clang по умолчанию (run: clang -v -x c++ -fsyntax-only some file, чтобы увидеть их.)

Ответ 4

Использовать clang++ только для компиляции .cpp, а затем вместо MS link try ld linker. Работает для меня.

Ответ 5

Поддержка Clang/LLVM для Windows по-прежнему не идеальна. Попробуйте включить эту опцию: -Xclang -cxx-abi -Xclang microsoft. Но я не уверен, правильно ли он работает.