Недавно я решил начать писать стандартно-совместимые 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
Может кто-нибудь, пожалуйста, взгляните на это и скажите мне, что я делаю неправильно?
Почему 'g ++ test.exe'? Разве вы просто не хотите его исполнять с помощью './Test'? –
Я не обещаю, что это исправит, но попробуйте выполнить компиляцию с 'test.o' вместо' test', а затем связать с 'g ++ test.o' вместо' g ++ test'. –
Было бы лучше, если бы вы не назвали ваш программный тест. Назовите это что-то вроде ctest или cpptest. test - это команда unix. Если вы просто набираете тест вместо ./test, он ничего не выводит, и вы будете целыми кругами вокруг, пытаясь понять, почему ваша программа ничего не печатает. – cup