Подтвердить что ты не робот

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.

4b9b3361

Ответ 1

Там будет ошибка, ожидающая LLVM 3.4 относительно аналогичной проблемы. Проблема заключается в несовместимости ABI между LLVM 3.4 и MinGW 4.7+, что приводит к тому, что инструкции i686 выбираются вместо выбранной цели.

Возможным решением для x64 Windows является использование MinGW64 build. Это должно работать, но получение стандартных заголовков библиотек может быть сложным.

Рекомендуемое решение - выполнить следующие шаги здесь, настроить цели и любой путь в вашей системе и получить его для компиляции.