MinGW 4.4.0 kompiliert Hello World mit iostream nicht! Warum?
-
Hallo,
bin auf ein Problem gestoßen, das mir etwas seltsam vorkommt.
Ich benutze den MinGW C++ Compiler 4.4.0 (sollte wohl der zur Zeit aktuellste MinGW sein), aber folgendes kompiliert nicht:#include <iostream> int main(int argc, char** argv) { std::cout << "Hello World!" << std::endl; return 0; }
mit
mingw32-g++ -c test.cpp -o obj\test.o -std=c++98
Fehlermeldungen (Pfadangaben gekürzt):
../lib/gcc/mingw32/4.4.0/include/c++/cwchar:159: error: '::swprintf' has not been declared ../lib/gcc/mingw32/4.4.0/include/c++/cwchar:166: error: '::vswprintf' has not been declared
Lasse ich -std=c++98 weg (es wird also gnu++98 standardmäßig genommen), so kompiliert der Code einwandfrei. Ein Blick in die entsprechende Headerdatei cwchar lässt mich vermuten, dass diese Funktionen erst definiert werden, wenn wohl _GLIBCXX_USE_WCHAR_T definiert wurde (bin mir mit diesem Zusammenhang nicht 100% sicher).
ABER iostream (bzw. _GLIBCXX_USE_WCHAR_T, wchar_t oder was auch immer zu diesem ganzen Komplex gehört) sollte doch wohl zum C++ Standard gehören und nicht zu den GNU C++ Extensions? Obiger Code sollte also 100% standardkonform sein (und somit mit -std=c++98 kompilierbar).
Weiß da jemand was Genaues?
EDIT: Hab mal mein altes CodeBlocks ausgepackt. Dieser liefert ja noch immer MinGW 3.5.4 standardmäßig mit. Dieser schluckt den Code mit -std=c++98 problemlos. Bin jetzt grad mal am Gucken, ob ich auch wirklich alle zusammenpassenden Komponenten von MinGW 4.4.0 runtergeladen habe (der automatische Installer lädt ja leider immer noch ein früheres MinGW).
-
Ja, das ist echt ärgerlich.
Irgend ein altes makefile macht bei mirc++ -O3 -s -std=c++0x -ansi -U__STRICT_ANSI__ main.cpp
-
Ui, da brat mir doch einer einen Storch! Das tut es.
Habs weiterhin erstmal nur mit -std_c++98 (==-ansi), mit -std=c++0x warte ich noch bis er zum Standard wird.-U __STRICT_ANSI__ hat's gerichtet. Darauf wäre ich jetzt nicht ohne Weiteres gekommen, __STRICT_ANSI__ zu canceln...
Vielen Dank.
EDIT: Die Angabe, ein standardkonformes Programm zu schreiben, verhindert die Kompilierung eines standardkonformen Programmes...
Irgendwie putzig dieser MinGW
-
Irgendwie putzig dieser MinGW
Indeed.
Bei mir ():
$ g++ -c test.cpp -o test.o -std=c++98 $ g++ --version g++ (Ubuntu 4.3.2-1ubuntu12) 4.3.2
Da dürfte irgendein kindischer Hack für Windows der Grund sein. Die könnten das ruhig langsam ernst nehmen.
-
Der MinGW 3.4.5 macht da ja keine Zicken. Dort ist in cwchar auch noch ein anderes Makro angegeben, welches definiert sein muss, damit diverse Funktionen genutzt werden (an Stelle der alten Makros, so wie eben ::swprintf anstatt swprintf).
Bei 4.4.0 wird dieses zusätzliche Makro eben nicht abgefragt, naja, kann generell ein Fehler von 4.4.0 sein (vielleicht hat man diverse Header überarbeitet und hier eben was vergessen), oder die Veränderungen machten dieses Makro an dieser Stelle überflüssig.
So oder so, irgendwo ist da Mist gebaut worden.