Clang segfaults при выводе endl
Я пытаюсь использовать Clang (версия 3.4, через предварительно созданные двоичные файлы Windows), чтобы увидеть, может ли это быть подходящей заменой для GCC (версия 4.8.1, используя MinGW); однако я не могу получить простую программу для работы.
#include <iostream>
int main()
{
std::cout << std::endl;
}
Clang может скомпилировать и связать программу, но ее запуск приводит к сигналу SIGSEGV
и коду возврата 0xC0000005
. Вывод строки отлично работает, но std::flush
вызывает один и тот же результат, хотя позволяет автоматически автоматически очищать поток.
Отладка программы показывает только стек вызовов, содержащий __mingw_CRTStartup()
(Clang использует libstdС++, поскольку он не установил libС++) и std::cout ()
. Что может быть причиной этого и как оно может быть исправлено?
edit: То же самое происходит при использовании других манипуляторов ostream, таких как std::dec
и std::unitbuf
.
Ответы
Ответ 1
Там будет ошибка, ожидающая LLVM 3.4 относительно аналогичной проблемы. Проблема заключается в несовместимости ABI между LLVM 3.4 и MinGW 4.7+, что приводит к тому, что инструкции i686 выбираются вместо выбранной цели.
Возможным решением для x64 Windows является использование MinGW64 build. Это должно работать, но получение стандартных заголовков библиотек может быть сложным.
Рекомендуемое решение - выполнить следующие шаги здесь, настроить цели и любой путь в вашей системе и получить его для компиляции.