Невозможно запустить двоичный файл Windows, скомпилированный с помощью clang/lld/mingw

Я скачал и установил Clang на Windows 10 с http://releases.llvm.org/download.html и Mingw с https://sourceforge.net/projects/mingw-w64/

Я пытаюсь скомпилировать очень простую программу на C, используя clang / lld / mingw:

int main(int argc, char* argv[argc + 1])
{
  return 0;
}

Для компиляции я призываю:

clang.exe -target x86_64-windows-gnu -fuse-ld=lld.exe -g -gcodeview -Wl,/debug,/pdb:example.pdb example.c -o example.exe

Это создает исполняемый файл, который дает сбой при запуске в mainCRTStartup (__security_init_cookie, если быть точным).

Однако, запуск с ld по умолчанию из binutils успешен:

clang.exe -target x86_64-windows-gnu example.c -o example.exe

Обратите внимание, что я хочу использовать заголовки mingw, а не msvc.

Всего я попробовал:

  • x86_64-8.1.0-POSIX-SEH-rt_v6-rev0
  • x86_64-7.3.0-POSIX-SEH-rt_v5-rev0
  • x86_64-8.1.0-win32-SEH-rt_v6-rev0
  • x86_64-8.1.0-win32-sjlj-rt_v6-rev0

без всякой удачи в создании функциональной программы.

Так что мне интересно, есть ли что-то очевидное, что я здесь делаю неправильно?

РЕДАКТИРОВАТЬ: Я также пытался с msys2 безрезультатно. В частности:

pacman -S mingw-w64-x86_64-clang mingw-w64-x86_64-lld

1 ответ

Решение

Согласно https://bugs.llvm.org/show_bug.cgi?id=40568

Связывание с библиотеками импорта mingw из обычной установки mingw - это новая функция, впервые представленная в LLD 8.

Если вы не хотите скомпилировать предварительную версию lld, нужно дождаться бинарной версии llvm 8.0.0. Надеюсь, это будет где-то в марте.

Другие вопросы по тегам