2013-01-16 9 views
6

Mam 32-bitowy MinGW i 64-bitowy Eclipse CDT zainstalowany na 64-bitowym systemie Windows 7 z Intel Core i7-3612QM. Kiedy kompiluję i uruchamiam hello world, ciąg znaków drukuje, ale program dostaje później SIGILL.MinGW skompilowane awarie programów na 64-bitowym systemie Windows

Źródło:

#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 

Dodawanie cin powoduje segfault:

Źródło:

#include <iostream> 
#include <string> 

using namespace std; 

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

Verbose kompilatora 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: też

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 

problemy występują przy użyciu 32- code::blocks lub po opracowaniu ręcznie linii polecenia.

Jak mogę rozwiązać ten problem?

+0

Czy możemy zobaczyć, jakie są polecenia do kompilacji/linków i co mówi "gcc -v"? Czy zachowuje się tak samo, jeśli kompilujesz/linkujesz/uruchamiasz z wiersza poleceń zamiast z Eclipse? –

+0

@MichaelBurr Dodano wyjście kompilatora 'g ++ -v'; exes wciąż mają te same problemy. –

+0

Skąd wziąłeś instalację MinGW? Zastanawiam się, czy coś jest "wyłączone" z libstdC++. Dll. Może ponowna instalacja MinGW może być w porządku. Mam duże doświadczenie z dystrybucjami TDM (http://tdm-gcc.tdragon.net/) lub nguen's MinGW (http://nuwen.net/mingw.html) –

Odpowiedz

5

Kiedy próbowałem uruchomić EXE na innym komputerze, który nie miał MinGW intalled, to skarżył:

Program nie może uruchomić, ponieważ brakuje libgcc_s_dw2-1.dll od ciebie komputerze. Spróbuj ponownie zainstalować program, aby rozwiązać ten problem.

Googling ten błąd doprowadził mnie do SO pytanie The program can't start because libgcc_s_dw2-1.dll is missing

Od odpowiedź:

libgcc_s_dw2-1.dll powinien znajdować się w katalogu bin kompilatora. Możesz dodać ten katalog do zmiennej środowiskowej PATH do łączenia w czasie rzeczywistym , lub możesz uniknąć problemu, dodając "-static-libgcc -static-libstdC++" do flag kompilatora.

Dodałem więc flagi, a wynikowy program działał normalnie w obu systemach. Nie jestem pewien, dlaczego te flagi były wymagane do poprawnego działania mojego systemu dev, ponieważ katalog bin MinGW jest w PATH. Czy ktoś może zapewnić eksplorację? Czy powinienem utworzyć osobne pytanie?

Powiązane problemy