2013-02-15 3 views
4

Я следовал инструкциям на http://clang.llvm.org/get_started.htmlКомпиляция Clang на Windows,

Я собирал последний ствол LLVM и лязгом с MSVC 2010. Теперь я могу компилировать простые программы с Clang, но когда я пытался скомпилировать эту программу, я получил много ошибок , Вот программа:

#include <algorithm> 
int main(){ return 0; } 

И вот некоторые из ошибок:

In file included from hello.cpp:1: 
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\algorithm:6: 
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\memory:987: 
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\intrin.h:24: 
In file included from H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\immintrin.h:32: 
In file included from H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\xmmintrin.h:988: 
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1384:22: error: expected expression 
    return (__m128)__in; 
        ^
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1390:23: error: expected expression 
    return (__m128i)__in; 
        ^
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1396:23: error: expected expression 
    return (__m128d)__in; 
        ^

Полный выход из Clang: http://pastebin.com/qi87K8qr

Clang пытается использовать заголовки MSVC, но он не работает. Может быть, я должен использовать libC++ или libstdC++ вместо этого, но как это сделать?

Примечание Я не заинтересован в скомпилированных лязгом бинарных файлов

ответ

4

Да, лязг просто не поддерживает все расширенного синтаксиса Microsoft, C++, и, следовательно, не может разобрать C от Microsoft ++ заголовков, которые используют этот синтаксис. Не только это, но и Clang также не имеет полной поддержки Microsoft C++ ABI, манипуляции с именами и т. Д. Я считаю, что Clang на Windows работает хорошо с C.

Чтобы использовать другую стандартную библиотеку C++, вы можете заставить кланг игнорировать обычные каталоги заголовков и библиотек с помощью, IIRC, -nostdinc++ и -nostdlib++. Затем вы можете указать clang каталоги include и library, которые вы хотите использовать (используя -isystem или -I или что-то еще). Однако я не уверен, работают ли libC++ или libstdC++ в этих обстоятельствах, поскольку они, вероятно, зависят от того, что не существует в библиотеке времени выполнения Windows C.

0

Ошибки были в заголовке, поставляемом с самим собой. Похоже, он не может правильно обрабатывать типы MMX/SSE. Попробуйте добавить в командной строке -msse -msse2 ключи.

0

Я использую libstdC++ и построил clang, используя VS2012Express для рабочего стола. Строка cmake была «Visual Studio 11 Win64» и основными директориями. задаются с использованием аргумента -I.

0

Мое предположение, что вы можете работать, если я использовал заголовки mingw для Windows.

2

Chandler Carruth mentioned at Going Native 2013 что есть alpha builds of clang for Windows с интеграцией Visual Studio. Многие вещи разбиты, например, потоки (так что добрый старый мир привет не будет работать). Тем не менее, прилагается много усилий для того, чтобы сделать работу Clang в Windows, поэтому ожидайте, что она будет довольно неплохой.

Смежные вопросы