Как скомпилировать с clang и mingw-w64? - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь использовать clang10 с libstdc ++ mingw-w64, так как заголовки MSV C не поддерживают clang 10. Я не против иметь новые части стандартной библиотеки, я просто хочу использовать новые возможности языка.

У меня mingw-w64 версии 8.1.0 для x86_64 с установленными потоками POSIX и исключениями SEH, и я запускаю clang с помощью команды:

clang++ -target x86_64-pc-windows-gnu -std=c++20 ...

Все работает нормально. Все языковые функции, которые должны быть реализованы в clang 10, работают, но когда я выкидываю любое исключение, это происходит, когда я запускаю программу (программа компилируется нормально):

Mingw-w64 runtime failure:
  Unknown pseudo relocation protocol version 65536.

Я попытался установить mingw с исключениями SJLJ и используйте флаг -fsjlj-exceptions в clang, но программа даже не компилируется:

C:\Users\egst\AppData\Local\Temp\test-f4a4de.o:test.cpp:(.text+0x82): undefined reference to `__gxx_personality_sj0'
C:\Users\egst\AppData\Local\Temp\test-f4a4de.o:test.cpp:(.text+0xd9): undefined reference to `_Unwind_SjLj_Register'
C:\Users\egst\AppData\Local\Temp\test-f4a4de.o:test.cpp:(.text+0x177): undefined reference to `_Unwind_SjLj_Resume'

clang++ --version показывает Target: x86_64-pc-windows-msvc. Может быть, есть версия для x86_64-pc-windows-gnu, которую я должен использовать вместо этого? Есть ли способ заставить это работать в данный момент, или я должен ждать поддержки от MSV C? Есть ли альтернатива, кроме MSV C и MinGW?

1 Ответ

2 голосов
/ 14 апреля 2020

Основываясь на предложении @HolyBlackCat, я попробовал это с MSYS2, и он отлично работает. Я просто установил MSYS2, затем из MSYS bash я установил этот пакет. Он устанавливает все в ...\msys2\mingw64. Вы получаете clang 10 (+ g cc 9.3) и все необходимые заголовки stl (все еще нет заголовков c ++ 20, таких как <concepts>, хотя).

...