Невозможно запустить двоичный файл 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. Надеюсь, это будет где-то в марте.