Clang Bug 43375(未修复) 解决方法
在C++中使用STL中的map并target MinGW-w64时,Clang会导致如下编译错误。
Mingw-w64 runtime failure:
Unknown pseudo relocation protocol version 16777216.
代码如下:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int,string> m;//map<int,string> m={{1,"Bug"}};
m[1]="Damn";//试图用[]操作符给map添加或改变value
for (auto it : m)
{
cout << it.first << ends << it.second << endl;
}
system("pause");
return 0;
}
MinGW-w64 & GCC版本:8.1.0 LLVM/Clang版本:11.0.0
Github上的解决方法:编译命令中删除 –target=x86_64-w64-mingw
https://github.com/microsoft/vscode-cpptools/issues/3373
但同时编译会报错:找不到头文件
经实验,将 -std=c++17 或 -std=c++20 改为 -std=c++11 或 -std=c++14 即可成功编译。
更新:将GCC或MinGW-w64更新更高版本可解决问题。
GCC & MinGW-w64最新版下载地址:WinLibs standalone build of GCC and MinGW-w64 for Windows
该Bug页面:https://bugs.llvm.org/show_bug.cgi?id=43375