Dev*_*ion 7 windows gcc mingw g++ c++11
我刚开始使用MinGW for Windows.尝试使用时创建可执行文件
g++ a.cpp -o a.exe -std=c++14
对于以下代码:
#include <string>
using namespace std;
int main()
{
string x = to_string(123);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
C:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../libmingwex.a(vsnprintf.o):(.text+0x0): multiple definition of vsnprintf
C:\Users\..\Local\Temp\cc4sJDvK.o:c:/mingw/include/stdio.h:426: first defined here
collect2.exe: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
导致此错误的根本原因是什么?如何让它消失?虽然我可以轻松找到to_string()功能的替代品,但我不确定是什么原因导致此错误发生.
SiZ*_*OUS 10
这个问题,即2019 年 12 月multiple definition of vsnprintf在MinGW 中仍然存在。
查了很多资料,在官方邮件列表中找到了解决方法。
这是一个错误mingwrt-5.2.2。降级到mingwrt-5.2.1版本可以解决这个问题。为此,只需输入以下命令:
mingw-get upgrade mingwrt=5.2.1
Run Code Online (Sandbox Code Playgroud)
然后重启MinGW shell。
注意: MinGW-w64 和 MinGW 是独立的项目,所以接受的解决方案对我没有太大帮助,因为我想保留 MinGW 而不是转移到 MinGW-w64。
小智 7
有多种定义,vsnprintf在这两个stdio.h和libmingwex.a.我可以通过#define __USE_MINGW_ANSI_STDIO 0在任何包含之前添加代码的开头来解决这个问题,这会禁用vsnprintfin 的定义stdio.h.