MinGW g ++:使用to_string时vsnprintf的多个定义

时间:2017-04-08 13:07:26

标签: windows c++11 gcc g++ mingw

我刚开始使用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;
}

我收到了以下错误:

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

此错误的根本原因是什么?如何让它消失?虽然我可以轻松找到to_string()功能的替代品,但我不确定是什么原因导致此错误发生。

4 个答案:

答案 0 :(得分:20)

安装MinGW软件包mingw32-libmingwex-*将链接vsnprintf的适当版本,并避免链接器错误。

答案 1 :(得分:6)

vsnprintfstdio.h中有libmingwex.a的多个定义。我可以通过在代码的开头添加#define __USE_MINGW_ANSI_STDIO 0,在任何包含之前添加vsnprintf来禁用stdio.h public final boolean isInternetOn() { // get Connectivity Manager object to check connection ConnectivityManager connec = (ConnectivityManager) getActivity().getSystemService(getActivity().CONNECTIVITY_SERVICE); // Check for network connections if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { // if connected with internet Toast.makeText(getActivity(), " Connected ", Toast.LENGTH_LONG).show(); return true; } else if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { Toast.makeText(getActivity(), " Not Connected ", Toast.LENGTH_LONG).show(); return false; } return false; } 的定义。

答案 2 :(得分:2)

我使用MinGW w64编译器

解决了这个问题
  1. 下载mingw-w64-install.exe
  2. 设置为Version:6.3.0,Architecture:i686,Threads:posix,Exception:dwarf和Build revision:2。
  3. 我希望这会有所帮助。

答案 3 :(得分:0)

这个问题,即multiple definition of vsnprintf,到2019年12月在MinGW中仍然存在。

经过大量调查,我在official mailing list中找到了解决方案。

这是mingwrt-5.2.2中的错误。降级到mingwrt-5.2.1版本可以解决该问题。 为此,只需输入以下命令:

mingw-get upgrade mingwrt=5.2.1

然后重新启动MinGW Shell。

Read the full story here

注意: MinGW-w64和MinGW是单独的项目,因此,被接受的解决方案对我的帮助不大,因为我想保留MinGW而不是迁移到MinGW-w64。