【问题标题】:How to compile with clang and mingw-w64?如何用 clang 和 mingw-w64 编译?
【发布时间】: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


【解决方案1】:

根据@HolyBlackCat 的建议,我用 MSYS2 进行了尝试,效果很好。我只是安装了 MSYS2,然后从 MSYS bash 我安装了this 包。它将所有内容安装在...\msys2\mingw64 中。你会得到 clang 10 (+ gcc 9.3) 和所有需要的 stl 头文件(仍然没有像 <concepts> 这样的 c++20 头文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多