web-dev-qa-db-ja.com

MinGW g ++:to_stringを使用する場合のvsnprintfの複数の定義

私は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()関数の代わりを簡単に見つけることができますが、最初にこのエラーが発生する原因が何かはわかりません。

10
Devotion

MinGW w64 コンパイラを使用してこの問題を解決しました

  1. ダウンロードmingw-w64-install.exe
  2. バージョンへのセットアップ:6.3.0、アーキテクチャ:i686、スレッド:posix、例外:dwarfおよびビルドリビジョン:2。

これがお役に立てば幸いです。

7
keroberotte

MinGWパッケージのインストールmingw32-libmingwex-*は、適切なバージョンのvsnprintfをリンクし、リンカーエラーを回避します。

24
thoughtcrimes

stdio.hlibmingwex.aの両方にvsnprintfの複数の定義があります。これを回避するには、インクルードの前にコードの先頭に#define __USE_MINGW_ANSI_STDIO 0を追加します。これにより、stdio.hvsnprintfの定義が無効になります。

7
Qrox

この問題、つまりmultiple definition of vsnprintfは、2019年12月の時点でも MinGW に存在します。

たくさん調べた結果、解決策は 公式メーリングリスト で見つかりました。

mingwrt-5.2.2のバグです。 mingwrt-5.2.1バージョンにダウングレードすると、この問題は解決します。これを行うには、次のコマンドを入力します。

mingw-get upgrade mingwrt=5.2.1

次に、MinGWシェルを再起動します。

ここで全文を読む

注:MinGW-w64とMinGWは別個のプロジェクトであるため、MinGWを保持し、移動しないようにするため、承認されたソリューションはあまり役に立ちませんMinGW-w64に。

5
SiZiOUS