私は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()
関数の代わりを簡単に見つけることができますが、最初にこのエラーが発生する原因が何かはわかりません。
MinGW w64 コンパイラを使用してこの問題を解決しました
これがお役に立てば幸いです。
MinGW
パッケージのインストールmingw32-libmingwex-*
は、適切なバージョンのvsnprintf
をリンクし、リンカーエラーを回避します。
stdio.h
とlibmingwex.a
の両方にvsnprintf
の複数の定義があります。これを回避するには、インクルードの前にコードの先頭に#define __USE_MINGW_ANSI_STDIO 0
を追加します。これにより、stdio.h
のvsnprintf
の定義が無効になります。
この問題、つまり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に。