Ich habe Schwierigkeiten beim Kompilieren eines C++-Programms, das ich geschrieben habe.
Dieses Programm ist sehr einfach und entspricht, soweit ich weiß, allen Regeln des C++-Standards. Ich habe die gesamte ISO/IEC 14882:2003 zweimal durchgelesen, um sicherzugehen.
Das Programm sieht folgendermaßen aus:
Hier ist die Ausgabe, die ich erhielt, als ich versuchte, dieses Programm mit Visual C++ 2010 zu kompilieren:
c:\dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172
Enttäuscht versuchte ich es mit g++ 4.5.2, aber auch das war nicht hilfreich:
c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
Ich dachte mir, dass Clang (Version 3.0 trunk 127530) funktionieren muss, da es für seine Standardkonformität so hoch gelobt wird. Leider hat es mir nicht einmal eine seiner hübschen, hervorgehobenen Fehlermeldungen angezeigt:
c:\dev>clang++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
clang++: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
Um ehrlich zu sein, weiß ich nicht wirklich, was diese Fehlermeldungen bedeuten.
Viele andere C++-Programme haben Quelldateien mit einer .cpp Erweiterung, also dachte ich, dass ich meine Datei vielleicht umbenennen müsste. Ich änderte ihren Namen in helloworld.cpp aber das hat nicht geholfen. Ich glaube, es gibt einen sehr schwerwiegenden Fehler in Clang, denn als ich versuchte, das umbenannte Programm damit zu kompilieren, flippte es aus, gab "84 Warnungen und 20 Fehler generiert" aus und ließ meinen Computer viel piepen!
Was habe ich hier falsch gemacht? Habe ich einen kritischen Teil des C++-Standards übersehen? Oder sind alle drei Compiler wirklich so kaputt, dass sie dieses einfache Programm nicht kompilieren können?