MinGW编译的程序在64位Windows上崩溃
MinGW compiled programs crash on 64 bit Windows
我在带有Intel Core i7-3612QM
的64位Windows 7上安装了32位MinGW和64位Eclipse CDT。当我编译并运行hello world
时,字符串会打印出来,但程序随后会得到一个SIGILL
。
来源:
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
Stacktrace:
hello.exe [C/C++ Application]
hello.exe [5532]
Thread [1] 0 (Suspended : Signal : SIGILL:Illegal instruction)
libstdc++-6!_ZSt4cout() at 0x6fccc3c0
libstdc++-6!_ZNSolsEPFRSoS_E() at 0x6fc8908c
_fu0___ZSt4cout() at hello.cpp:5 0x4013be
gdb
添加cin
会导致segfault:
来源:
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "Please type your name: ";
cin >> name;
cout << "Hello " << name << endl;
return 0;
}
详细编译器输出:
C:UsersSeantemp>g++ -v main.cpp
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.2/configure --enable-languages=c,c++,ada,fortran,obj
c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo
mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-r
untime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.2 (GCC)
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=i386' '-march=i386'
c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/cc1plus.exe -quiet -v -iprefix c:min
gwbin../lib/gcc/mingw32/4.6.2/ main.cpp -quiet -dumpbase main.cpp -mtune=i386
-march=i386 -auxbase main -version -o C:UsersSeanAppDataLocalTempccSVBzeY.
s
GNU C++ (GCC) version 4.6.2 (mingw32)
compiled by GNU C version 4.6.2, GMP version 5.0.1, MPFR version 2.4.1,
MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "c:mingwbin../lib/gcc/mingw32/4.6.2/../../../.
./mingw32/include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.2/inclu
de/c++"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.2/inclu
de/c++/mingw32"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.2/inclu
de/c++/backward"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.2/inclu
de"
ignoring duplicate directory "/mingw/lib/gcc/mingw32/4.6.2/../../../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.2/inclu
de-fixed"
ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.2/../
../../../mingw32/include"
ignoring duplicate directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
c:mingwbin../lib/gcc/mingw32/4.6.2/include/c++
c:mingwbin../lib/gcc/mingw32/4.6.2/include/c++/mingw32
c:mingwbin../lib/gcc/mingw32/4.6.2/include/c++/backward
c:mingwbin../lib/gcc/mingw32/4.6.2/include
c:mingwbin../lib/gcc/mingw32/4.6.2/../../../../include
c:mingwbin../lib/gcc/mingw32/4.6.2/include-fixed
End of search list.
GNU C++ (GCC) version 4.6.2 (mingw32)
compiled by GNU C version 4.6.2, GMP version 5.0.1, MPFR version 2.4.1,
MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: f7eb4168c2cf10318cc29da8d23b7f3c
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=i386' '-march=i386'
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/as.exe -o C:User
sSeanAppDataLocalTempccb0vTGl.o C:UsersSeanAppDataLocalTempccSVBzeY.s
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/;c:/mingw/bin/../libexec
/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/4.6.2/;c:/mingw/bin/../lib/gcc/;c:/
mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/lib/;c:/mingw/bin/../lib/
gcc/mingw32/4.6.2/../../../;/mingw/lib/
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=i386' '-march=i386'
c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/collect2.exe -Bdynamic -u ___register
_frame_info -u ___deregister_frame_info c:/mingw/bin/../lib/gcc/mingw32/4.6.2/..
/../../crt2.o c:/mingw/bin/../lib/gcc/mingw32/4.6.2/crtbegin.o -Lc:/mingw/bin/..
/lib/gcc/mingw32/4.6.2 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw
32/4.6.2/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../.
. -L/mingw/lib C:UsersSeanAppDataLocalTempccb0vTGl.o -lstdc++ -lmingw32 -l
gcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel
32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt c:/mingw/bin/../lib/gcc
/mingw32/4.6.2/crtend.o
Stacktrace:
hello.exe [C/C++ Application]
hello.exe [9092]
Thread [1] 0 (Suspended : Signal : SIGSEGV:Segmentation fault)
libstdc++-6!_ZNSs12_Alloc_hiderC1EPcRKSaIcE() at 0x6fc89542
libstdc++-6!_ZNSsC1Ev() at 0x6fc8c38b
main() at hello.cpp:7 0x4013a7
gdb
使用32位code::blocks
或从命令行手动编译时也会出现问题。
我该怎么解决这个问题?
当我试图在另一台没有安装MinGW的计算机上运行EXE时,它抱怨道:
程序无法启动,因为您缺少libgcc_s_dw2-1.dll计算机请尝试重新安装程序以解决此问题。
在谷歌上搜索该错误导致我提出SO问题该程序无法启动,因为libgcc_s_dw2-1.dll缺少
从答案来看:
libgcc_s_dw2-1.dll
应该在编译器的bin目录中。您可以将此目录添加到PATH环境变量中运行时链接,或者您可以通过添加"static libgcc-static libstdc++"添加到编译器标志中。
所以我添加了标志,结果程序在两个系统上都能正常运行。我不知道为什么需要这些标志才能在我的开发系统上正常工作,因为MinGWbin目录在PATH中。有人能解释一下吗?我应该单独提出一个问题吗?
相关文章:
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 在Windows上调试linux崩溃转储
- 从 C# Windows 应用程序调用 C dll 会导致 svchost.exe 崩溃
- UCRTbase.dll涉及TCP通信的C ++ Windows Embedded Standard崩溃
- 简单的文本文件格式化在linux下崩溃,但在Windows中很好
- 正则表达式在 Windows 上初始化时崩溃
- Windows 10 Creators Update(1703)崩溃了我们的应用程序
- Malloc()/free()在Windows上的几个线程中崩溃
- 当使用 /ENTRY:main 和 /MT 运行时库编译为 /SUBSYSTEM:WINDOWS 时,应用程序崩溃
- Windows C++程序中的访问冲突是否总是立即崩溃
- Windows/c - 从第三方EXE加载图标,用于SDL_SETWINDOWICON-崩溃
- libtorrent和tcp ::受体在Windows上崩溃并违反访问
- 当STDERR重定向到管道时,为什么BOOST ::流程在Windows上崩溃
- 程序在Windows中的DLL边界上使用嵌入式Python/C 代码崩溃
- 我的程序在Windows机器上崩溃了,但在Linux上运行良好
- GMock 测试夹具在 Windows 上崩溃
- 带有ATL子类的Windows 10 64位上的随机崩溃
- log4clus:在Logger:上崩溃:在Windows上关闭
- std::endl 导致使用 MinGW 编译的 Windows 8 崩溃
- 在没有安装Visual Studio的情况下获得Windows崩溃的堆栈跟踪?(c++)