4

mingwにgccとg ++をインストールしました。g++ コンパイラが機能するかどうかをテストするために、非常に単純な「hello world」プログラムを作成しました。コード:

#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}

コンパイル:

g++ Test.cpp

そして、いくつかのエラーが表示されます:

D:/MinGW[Finished in 0.6s with exit code    1]/bin/../lib/gcc/mingw32/3.4.5/../../../../mingw32/lib/crt2.o: In function `_mingw_setargv':
D:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../mingw32/lib/libmingwex.a(glob.o): In function `glob_match':
i:\p\giaw\src\pkg\mingwrt-4.0-1-mingw32-src\bld/../mingwrt-4.0.0-1-mingw32-src/src/libcrt/misc/glob.c:733: undefined reference to `__chkstk_ms'
D:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../mingw32/lib/libmingwex.a(glob.o): In function `glob_strdup':
i:\p\giaw\src\pkg\mingwrt-4.0-1-mingw32-src\bld/../mingwrt-4.0.0-1-mingw32-src/src/libcrt/misc/glob.c:85: undefined reference to `__chkstk_ms'
D:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../mingw32/lib/libmingwex.a(glob.o): In function `glob_match':
i:\p\giaw\src\pkg\mingwrt-4.0-1-mingw32-src\bld/../mingwrt-4.0.0-1-mingw32-src/src/libcrt/misc/glob.c:841: undefined reference to `__chkstk_ms'
D:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../mingw32/lib/libmingwex.a(glob.o): In function `glob_strdup':
i:\p\giaw\src\pkg\mingwrt-4.0-1-mingw32-src\bld/../mingwrt-4.0.0-1-mingw32-src/src/libcrt/misc/glob.c:85: undefined reference to `__chkstk_ms'
D:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../mingw32/lib/libmingwex.a(glob.o):i:\p\giaw\src\pkg\mingwrt-4.0-1-mingw32-src\bld/../mingwrt-4.0.0-1-mingw32-src/src/libcrt/misc/glob.c:85: more undefined references to `__chkstk_ms' follow
collect2: ld returned 1 exit status
4

6 に答える 6

5

これは、MinGW プロジェクト管理者からの信頼できる回答です。

問題が発生するのは、GCC の古いバージョン (メンテナンスされていない、サポートされていない) を使い続けるためです。の現在のバージョンはGCC-4.x を使用してコンパイルされています(mingwrt私は GCC-4.8.2mingwrt-3.21とその子孫に使用しました) 。は GCC-3.x と互換性がありません)。__chkstk_mslibgcc

FWIW、mingwrt-3.21.1GCC-3.4.5 インストールに組み込まれた GCC-4.8.2 をインストールすると、問題を再現できます。同様に、同じバージョンの GCC でビルドするとmingwrt-3.21.1、 GCC-3.4.5でも正常に使用できます。

したがって、信頼できる答えとして、廃止された GCC バージョンを引き続き使用する必要がある場合は、同じ廃止されたコンパイラを使用して、関連するすべてのライブラリを再構築する準備をする必要があります。

于 2015-06-13T08:23:01.377 に答える
3

古いライブラリへのリンクに関して、元の問題は解決されたようですが、私は逆のケースを持っています。古い GCC 3.4 バージョンで作業する必要があるため、gcc-v3-core パッケージをインストールしました。次に、些細なソースをリンクすると、すぐに元のエラーが表示されます。MinGW GCC 3.4 は mingwrt > 3.20 では動作しないことがわかりました。問題は、gcc-v3-core に誤った mingwrt 仕様が含まれており、最新バージョンが許可されていることです。

解決策は簡単です:

mingw-get upgrade "mingwrt=3.20.*"

!アップデート!実際、mingwrt-3.20 リンカでは、C++ コードに対して同じエラーが報告されます。

g++ hello.cpp

バム!

解決策 2:

mingw-get upgrade "mingwrt=3.18.*"

gcc-v3-g++ で動作するように見える最後のもの。

于 2014-04-15T10:48:18.643 に答える
0

ばかげて新しいバージョンを古いインストールにインストールしたために発生した同様の問題がありました。修正は明らかでした。古いインストールをバックアップしてから削除し、新規インストールを行いました。すべてが完璧にコンパイルされました。古い習慣は死ぬのが難しいと思います。;)

于 2015-12-30T03:21:37.633 に答える