2013-01-16 14 views
6

Ho 32bit MinGW e 64 bit Eclipse CDT installati su 64 bit Windows 7 con un Intel Core i7-3612QM. Quando compilo ed eseguo hello world, la stringa viene stampata, ma in seguito il programma ottiene SIGILL.MinGW programmi compilati in crash su 64 bit Windows

Fonte:

#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 

Aggiunta cin provoca un segfault:

Fonte:

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    string name; 
    cout << "Please type your name: "; 
    cin >> name; 
    cout << "Hello " << name << endl; 
    return 0; 
} 

dettagliato compilatore ou tput:

C:\Users\Sean\temp>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 
gw\bin\../lib/gcc/mingw32/4.6.2/ main.cpp -quiet -dumpbase main.cpp -mtune=i386 
-march=i386 -auxbase main -version -o C:\Users\Sean\AppData\Local\Temp\ccSVBzeY. 
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:\mingw\bin\../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:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++ 
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/mingw32 
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/backward 
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include 
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include 
c:\mingw\bin\../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 
s\Sean\AppData\Local\Temp\ccb0vTGl.o C:\Users\Sean\AppData\Local\Temp\ccSVBzeY.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:\Users\Sean\AppData\Local\Temp\ccb0vTGl.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 

I problemi si verificano anche utilizzando 32 bit code::blocks o se compilato manualmente dalla riga di comando.

Come posso risolvere questo?

+0

Possiamo vedere quali sono i comandi da compilare/collegare e cosa dice 'gcc -v'? Inoltre, si comporta allo stesso modo se compilate/link/esegui dalla riga di comando anziché da Eclipse? –

+0

@MichaelBurr Aggiunta l'output del compilatore 'g ++ -v'; gli ex hanno ancora gli stessi problemi. –

+0

Dove hai ottenuto l'installazione MinGW? Mi chiedo se qualcosa è 'spento' con libstdC++. Dll. Forse una reinstallazione di MinGW potrebbe essere in ordine. Ho avuto una grande esperienza con le distribuzioni TDM (http://tdm-gcc.tdragon.net/) o nuwen's MinGW (http://nuwen.net/mingw.html) –

risposta

5

Quando ho provato a eseguire il file EXE su un altro computer che non ha avuto MinGW intalled, si è lamentato:

Il programma non può iniziare perché libgcc_s_dw2-1.dll manca da voi computer. Prova a reinstallare il programma per risolvere questo problema.

Googling tale errore mi ha portato alla domanda SO The program can't start because libgcc_s_dw2-1.dll is missing

Dalla risposta:

Il libgcc_s_dw2-1.dll dovrebbe essere nella directory bin del compilatore. È possibile aggiungere questa directory alla variabile di ambiente PATH per il collegamento di runtime o evitare il problema aggiungendo "-static-libgcc -static-libstdC++" ai flag del compilatore.

Quindi ho aggiunto i flag e il programma risultante funzionava normalmente su entrambi i sistemi. Non sono sicuro del motivo per cui questi flag sono stati necessari perché funzioni correttamente sul mio sistema di sviluppo, poiché la directory bin MinGW si trova nel PERCORSO. Qualcuno può fornire un'esplosione? Devo creare una domanda separata?

Problemi correlati