2013-01-16 44 views
6

पर क्रैश प्रोग्राम क्रैश 32 बिट मिनीजीडब्ल्यू और 64 बिट ग्रहण सीडीटी 64 बिट विंडोज 7 पर इंटेल Core i7-3612QM के साथ स्थापित है। जब मैं संकलित करता हूं और hello world चलाता हूं, स्ट्रिंग प्रिंट करता है, लेकिन प्रोग्राम को SIGILL बाद में मिलता है।मिनीजीडब्ल्यू संकलित प्रोग्राम 64 बिट विंडोज़

स्रोत:

#include <iostream> 
using namespace std; 

int main() { 
    cout << "Hello World!" << endl; 
    return 0; 
} 

स्टैकट्रेस: ​​

स्रोत::

#include <iostream> 
#include <string> 

using namespace std; 

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

शब्दाडंबरपूर्ण संकलक कहां

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 का कारण बनता है 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 

स्टैकट्रेस: ​​

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 का उपयोग कर पाए जाते हैं या जब कमांड लाइन से मैन्युअल रूप से संकलित।

मैं इसे कैसे ठीक कर सकता हूं?

+0

क्या हम देख सकते हैं कि संकलन/लिंक क्या है और क्या 'gcc -v' कहता है? साथ ही, यदि आप एक्लिप्स के बजाय कमांड लाइन से संकलित/लिंक/रन करते हैं तो यह वही व्यवहार करता है? –

+0

@MichaelBurr जोड़ा गया 'g ++ -v' कंपाइलर आउटपुट; exes अभी भी एक ही समस्या है। –

+0

आपको मिनजीडब्ल्यू इंस्टॉलेशन कहां मिला? मुझे आश्चर्य है कि libstdC++। Dll के साथ कुछ 'बंद' है। शायद MinGW की पुनर्स्थापना क्रम में हो सकती है। मुझे टीडीएम वितरण (http://tdm-gcc.tdragon.net/) या न्यूवेन के मिनजीडब्ल्यू (http://nuwen.net/mingw.html) –

उत्तर

5

जब मैं किसी अन्य कंप्यूटर कि MinGW intalled नहीं था पर EXE भागने की कोशिश की, यह शिकायत की:

कार्यक्रम शुरू नहीं कर सकते क्योंकि libgcc_s_dw2-1.dll से आप कंप्यूटर याद आ रही है। इस समस्या को ठीक करने के लिए प्रोग्राम को पुनर्स्थापित करने का प्रयास करें।

libgcc_s_dw2-1.dll संकलक के बिन निर्देशिका में होना चाहिए:

कि त्रुटि Googling The program can't start because libgcc_s_dw2-1.dll is missing

जवाब से ऐसा सवाल करने के लिए मुझे का नेतृत्व किया। आप रनटाइम लिंकिंग के लिए इस निर्देशिका को अपने PATH पर्यावरण चर में जोड़ सकते हैं, या आप अपने कंपाइलर झंडे में "-static-libgcc -static-libstdC++" जोड़कर समस्या से बच सकते हैं।

इसलिए मैंने झंडे जोड़े, और परिणामस्वरूप कार्यक्रम दोनों प्रणालियों पर सामान्य रूप से चला। मुझे यकीन नहीं है कि मेरे देव सिस्टम पर ठीक से काम करने के लिए इन झंडे की आवश्यकता क्यों थी, क्योंकि मिनजीडब्ल्यू बिन निर्देशिका पैथ में है। क्या कोई स्पष्टीकरण प्रदान कर सकता है? क्या मुझे एक अलग सवाल बनाना चाहिए?