2013-12-18 2 views
0

Недавно я решил начать писать стандартно-совместимые C++ вместо использования Turbo-C++, поэтому я загрузил cygwin на windows 7 и установил g ++. Я пытался запустить программу привет мир:Ошибка множественной декларации в g ++ (cygwin)

#include<iostream> 

using namespace std; 

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

и напечатал это в Cygwin:

g++ test.cpp -o test 
g++ test 

Надеясь, что я сделал хорошо, я нажал войти, чтобы найти мое сердце разбито на этой гигантской стеной непонятное текст:

$ g++ test.exe 
test.exe: In function `mainCRTStartup': 
/usr/src/debug/cygwin-1.7.27-2/winsup/cygwin/crt0.c:23: multiple definition of `mainCRTStartup' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../lib/crt0.o:/usr/src/debug/cygwin-1.7.27-2/winsup/cygwin/crt0.c:23: first defined here 
test.exe: In function `mainCRTStartup': 
/usr/src/debug/cygwin-1.7.27-2/winsup/cygwin/crt0.c:23: multiple definition of `WinMainCRTStartup' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../lib/crt0.o:/usr/src/debug/cygwin-1.7.27-2/winsup/cygwin/crt0.c:23: first defined here 
test.exe:cygming-crtbegin.c:(.text+0x60): multiple definition of `__gcc_register_frame' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o:cygming-crtbegin.c:(.text+0x10): first defined here 
test.exe:cygming-crtbegin.c:(.text+0xc0): multiple definition of `__gcc_deregister_frame' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o:cygming-crtbegin.c:(.text+0x70): first defined here 
test.exe:crt0.c:(.text+0x50): multiple definition of `.weak._Jv_RegisterClasses.__gcc_register_frame' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o:cygming-crtbegin.c:(.text+0x0): first defined here 
test.exe:cygming-crtend.c:(.idata+0x178): multiple definition of `__imp__ZSt4cout' 
test.exe:cygming-crtend.c:(.idata+0x178): first defined here 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o:cygming-crtbegin.c:(.text+0x35): undefined reference to `_Jv_RegisterClasses' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o:cygming-crtbegin.c:(.text+0x35): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_Jv_RegisterClasses' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o: bad reloc address 0x0 in section `.pdata' 
collect2: error: ld returned 1 exit status 

Может кто-нибудь, пожалуйста, взгляните на это и скажите мне, что я делаю неправильно?

+0

Почему 'g ++ test.exe'? Разве вы просто не хотите его исполнять с помощью './Test'? –

+0

Я не обещаю, что это исправит, но попробуйте выполнить компиляцию с 'test.o' вместо' test', а затем связать с 'g ++ test.o' вместо' g ++ test'. –

+0

Было бы лучше, если бы вы не назвали ваш программный тест. Назовите это что-то вроде ctest или cpptest. test - это команда unix. Если вы просто набираете тест вместо ./test, он ничего не выводит, и вы будете целыми кругами вокруг, пытаясь понять, почему ваша программа ничего не печатает. – cup

ответ

3

Нет необходимости в g++ test команды

командование g++ test.cpp -o test будет компилировать и компоновать код. вы можете запустить его с помощью ./test.exe

Смежные вопросы