2015-07-11 2 views
0

У меня есть проект на основе Clang, который использует MinGW (w64). Я сейчас обновляю его до Clang 3.6. По-видимому, MinGW изменил свой ABI в 4.7, и теперь Clang использует этот новый ABI, поэтому я одновременно обновляю MinGW.Использование Clang 3.6 с MinGW w64 4.8

Однако сейчас у меня небольшая проблема. Использование Clang для загрузки заголовков libstdC++ приводит к большому количеству ошибок компиляции, особенно о постоянном выражении, которое никогда не является постоянным. Я включил поддержку C++ 14 и C++ 1y.

Кроме того, я не могу заставить Клана признать, что целью является MinGW. Кажется, что их тройная поддержка MinGW была удалена в 3.6, и теперь я не знаю, как связаться с Clang, чтобы они испускали код, совместимый с MinGW ABI.

Как я могу заставить Clang быть совместимым с MinGW w64?

+0

возможно полезно http://stackoverflow.com/questions/25170594/changing-compiler-from-mingw32-to-clang-in-codelite-windows-results-in-compila – OMGtechy

+0

Я видел несколько таких результатов , но все они относятся к Clang 3.5 или ранее, что я уже успешно работал. Мне нужно всего лишь 3,6. – Puppy

ответ

3

Вы можете сделать лязг целевой MinGW-w64 через -target, т.е .:

$ clang -v 2>&1|grep Target 
Target: i386-pc-windows-cygnus 

$ clang -target i686-w64-mingw32 -v 2>&1|grep Target 
Target: i686-w64-windows-gnu 

Просто переименовать лязг исполняемый i686-w64-mingw32-clang++.exe также может делать то, что вы хотите.

+0

Прошло слишком много времени, но мои тесты показывают, что это решение разрешило 9 из моих 22 проблемных тестов. Я буду комментировать дальше и, возможно, принять этот ответ, как только посмотрю на оставшиеся 13 неудач. – Puppy

+0

Я проверил оставшиеся тесты и исправил большинство из них. У меня нет оснований для того, чтобы завершить оставшуюся часть по какой-либо причине совместимости с Clang-MinGW. Поэтому я буду принимать это как правильное решение. – Puppy

+0

Этот первый пример - cygwin, не так ли? – rogerdpack