我刚刚在mingw上安装了gcc和g ++。 我写了一个非常简单的“hello world”程序来测试g ++编译器是否有效。 代码:
#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
答案 0 :(得分:3)
关于链接旧库的原始问题似乎已经解决,但我的情况相反。 我需要使用较旧的GCC 3.4版本,所以我安装了gcc-v3-core软件包。 然后在链接一个普通的源时立即出现orig错误。 我发现MinGW GCC 3.4无法使用mingwrt&gt; 3.20问题是gcc-v3-core包含不正确的mingwrt规范,允许最新版本。
解决方案很简单:
mingw-get upgrade "mingwrt=3.20.*"
!更新! 实际上,使用mingwrt-3.20链接器报告C ++代码的相同错误:
g++ hello.cpp
BAM!
解决方案2:
mingw-get upgrade "mingwrt=3.18.*"
最后一个似乎与gcc-v3-g ++一起使用。
答案 1 :(得分:3)
这是来自MinGW项目管理员的权威答案。
您的问题出现是因为您继续使用过时的(不再维护;不再支持)GCC版本。当前版本的mingwrt
使用GCC-4.x编译,(我使用GCC-4.8.2作为mingwrt-3.21
及其后代),这引入了对__chkstk_ms
的依赖关系(由libgcc
提供 - 一个GCC-4.x特定库,与GCC-3.x不兼容。)
FWIW,如果我将GCC-4.8.2内置mingwrt-3.21.1
安装到GCC-3.4.5安装中,我可以重现您的问题。出于同样的原因,如果我使用相同版本的GCC 构建它,我也可以成功地将mingwrt-3.21.1
与GCC-3.4.5,一起使用。
因此,对于权威性答案:如果您必须继续使用过时的GCC版本,您需要准备好重建所有相关的库,使用相同的过时编译器。
答案 2 :(得分:0)
我遇到了类似的问题,因为我愚蠢地将旧版本安装到旧版本中。修复是显而易见的,我备份了我的旧安装,然后删除它并完成了全新安装。一切都编译得很完美。我觉得老习惯很难。 ;)
答案 3 :(得分:0)
这可能是对原始问题的“现代”答案:您可能会错过MinGW中的stdc ++和gcc库,必须自己手动链接它们。
答案 4 :(得分:-1)
只需在Windows XP中安装并运行GCC。
我在Windows_10_x64_b1607和Windows_XP_SP3中测试了完全相同的MinGW二进制文件(基于GCC-3.4.5)。
Windows 10会产生__chkstk_ms
错误,但在Windows XP中一切正常。
答案 5 :(得分:-4)