Un ligero cambio en el command para comstackr el progtwig C ++ causa un error

Esta mañana, estaba intentando comstackr un progtwig C ++ usando el siguiente command en la línea de command

g++ -o foo.cpp foo 

Paso aproximadamente una hora tratando de resolver por qué seguí recibiendo una reference indefinida y un error de definición múltiple hasta que me di count de que mi command para comstackr estaba mal y debería ser

 g++ foo.cpp -o foo 

Me pregunto cuál es la diferencia en el process entre g++ -o foo.cpp foo y g++ foo.cpp -o foo .

¿Por qué al colocar el error de compilation causa -o delante?

Porque -o especifica el file de salida. El primero significa que el file de salida sería 'foo.cpp' mientras que el segundo significa que su file de salida será 'foo'.

La syntax de g ++ es:

gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...] [-pedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] [-foption...] [-mmachine-option...] [-o outfile] [@file] infile...

Página de manual relevante: http://linux.die.net/man/1/g++

El interruptor -o toma un argumento. En tu caso, le estabas diciendo a g++ que foo.cpp la compilation resultante al file foo.cpp . Eso no es lo que quieres.

 $ g++ -o foo.cpp foo 

Desea generar la compilation resultante del file de origen ( foo.cpp ) en el file binary foo .

 $ g++ foo.cpp -o foo 

extracto de la página de manual de g ++

 -o <file> Place the output into <file>