【发布时间】:2020-07-27 02:34:58
【问题描述】:
我正在尝试将 clang10 与 mingw-w64 的 libstdc++ 一起使用,因为 MSVC 头文件不支持 clang 10。我不介意没有标准库的新部分,我只想使用新语言功能。
我为 x86_64 安装了 mingw-w64 版本 8.1.0,安装了 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.
我尝试使用 SJLJ 异常安装 mingw 并在 clang 中使用 -fsjlj-exceptions 标志,但程序甚至无法编译:
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 的版本?目前有什么方法可以完成这项工作,还是我应该等待 MSVC 的支持?除了 MSVC 和 MinGW 是否还有其他选择?
【问题讨论】:
-
mingw-w64 是 gcc 的一个端口。 clang 是一个不同的编译器。
-
@M.M OP 可能在谈论将 GCC 的 libstdc++ 与 Clang 一起使用。
-
@HolyBlackCat 没错。编辑问题以澄清这一点。
-
我正在使用从 MSYS2 安装的 GCC 和 Clang,异常对我有用。作为奖励,我得到了一个新的 GCC (9.3),而 Clang 默认为
--target=x86_64-w64-windows-gnu。不过,我还没有使用 MSYS2 GCC 在 vanilla Clang 上测试异常。 -
@HolyBlackCat 我会试试的,谢谢。我将编辑问题以允许使用任何相关替代 mingw 的解决方案。
标签: c++ exception clang mingw-w64 c++20