web-dev-qa-db-fra.com

MinGW g ++: définition multiple de vsnprintf lors de l'utilisation de to_string

Je viens de commencer à utiliser MinGW pour Windows. Lorsque vous essayez de créer un exécutable à l'aide

g++ a.cpp -o a.exe -std=c++14

pour le code ci-dessous:

#include <string>

using namespace std;

int main()
{
    string x = to_string(123);
    return 0;
}

Je reçois l'erreur suivante:

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

Quelle est la cause première de cette erreur et comment puis-je la faire disparaître? Bien que je puisse facilement trouver un remplacement pour la fonction to_string(), je ne suis pas sûr de ce qui provoque cette erreur en premier lieu.

10
Devotion

J'ai résolu ce problème en utilisant MinGW w64 compilateur

  1. télécharger mingw-w64-install.exe
  2. configuration à la version: 6.3.0, architecture: i686, threads: posix, exception: nain et révision de version: 2.

J'espère que cela vous sera utile.

7
keroberotte

Installation de MinGW packages mingw32-libmingwex-* liera une version appropriée de vsnprintf et évitera l'erreur de l'éditeur de liens.

24
thoughtcrimes

Il existe plusieurs définitions de vsnprintf dans les deux stdio.h et libmingwex.a. Je peux contourner ce problème en ajoutant #define __USE_MINGW_ANSI_STDIO 0 au début du code, avant tout inclus, ce qui désactive la définition de vsnprintf dans stdio.h.

7
Qrox

Ce problème, c'est-à-dire multiple definition of vsnprintf, existe toujours dans MinGW en décembre 2019.

Après avoir enquêté beaucoup, j'ai trouvé la solution dans la liste de diffusion officielle .

C'est un bug dans mingwrt-5.2.2. Rétrogradation vers le mingwrt-5.2.1 la version résout ce problème. Pour ce faire, entrez simplement la commande suivante:

mingw-get upgrade mingwrt=5.2.1

Redémarrez ensuite le shell MinGW.

Lisez l'histoire complète ici .

Remarque: MinGW-w64 et MinGW sont des projets séparés, donc la solution acceptée ne m'est pas très utile, car je veux garder MinGW et ne pas bouger à MinGW-w64.

5
SiZiOUS