Problem mit SGI & mingw g++.exe
-
Hallo,
ich arbeite mit der mingw-Version von G++.EXE und möchte die SGI STL benutzen. Leider bekomme ich beim Includieren des SGI Pfads seltsame Fehlermeldungen. Wie in der Doku angegeben, setze ich das SGI-Include beim Compilieren als Erstes
g++.exe -c main.cpp -o main.o -I"/Dev-Cpp/include/sgi" -I"W:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"W:/Dev-Cpp/include/c++/3.4.2/backward" -I"W:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"W:/Dev-Cpp/include/c++/3.4.2" -I"W:/Dev-Cpp/include"
Das Testprogramm ist minimalistisch, ich will erstmal sehen, dass ich es überhaupt compiliert bekomme:
[code#include <hash_map>
using namespace std;
struct eqstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) == 0;
}
};int main()
{
hash_map<const char*, int, hash<const char*>, eqstr> h;h["hugo"] = 1;
}
[/code]Leider erzeugt der Compiler eine Tonne Fehlermeldungen

Die erste Fehlermeldung lautet wie folgt:
In file included from /Dev-Cpp/include/sgi/stl_algobase.h:45,
from /Dev-Cpp/include/sgi/stl_hashtable.h:37,
from /Dev-Cpp/include/sgi/hash_map:31,
from main.cpp:28:
/Dev-Cpp/include/sgi/type_traits.h:96: error: an explicit specialization must be preceded by 'template <>'Diese wiederholt sich dann x-mal. Ich habe versucht, den Fehler zu verstehen, aber es ist mir ein paar Ebenen zu tief.
Vielleicht kennt aber jemand dieses Symptom u. kann mir eventuell helfen?
Hier noch die Angaben zum Compiler (g++ -v):
Reading specs from ../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)- Rüdiger
-
Vermutlich wird die SGI STL seit langem nicht mehr gewartet und ist daher nicht ISO C++ kompatibel. Warum willst du die überhaupt verwenden? Der GCC hat ohnehin einige Dinge, die in der STL, aber nicht in ISO C++ sind (schau dir die libstdc++ Doku an). Und wenn du einen inoffiziellen MinGW Build benutzt, erhältst du auch einen aktuellen GCC und eine aktuelle libstdc++, die dann schon die Erweiterungen aus dem TR1 bzw. kommenden C++ Standard kann. Eine hash_map heißt da unordered_map.
btw. wegen Dev-C++: http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html
-
Hallo Rüdiger,
rüdiger schrieb:
Vermutlich wird die SGI STL seit langem nicht mehr gewartet und ist daher nicht ISO C++ kompatibel.
... und daher ist es müssig, hier noch tief zu graben, OK. (Ich habe nur gedacht, vielleicht ist es ein einfacher, wohlbekannter "Klemmer", der mich daran hindert, mein Beispiel zu compilieren.)
Warum willst du die überhaupt verwenden?
Ich bin überhaupt nicht auf sgi festgelegt, will aber selbstverständliche und wohlbekannte Dinge wie Hashmaps einfach nicht selbst programmieren - die sgi-Doku im Web machte einen guten und soliden Eindruck ...
Der GCC hat ohnehin einige Dinge, die in der STL, aber nicht in ISO C++ sind (schau dir die libstdc++ Doku an).
Habe ich gemacht, guter Tipp, danke...
Und wenn du einen inoffiziellen MinGW Build benutzt, erhältst du auch einen aktuellen GCC und eine aktuelle libstdc++, die dann schon die Erweiterungen aus dem TR1 bzw. kommenden C++ Standard kann. Eine hash_map heißt da unordered_map.
... und die unordered_map gibt es erst ab Release 4.4 vom April d.J. Aber die Doku sieht in der Tat vielversprechend aus. Ich werde schauen, wo ich ein solches inoffizielles Release herbekomme, denn der letzte offizielle mingw-Download führt mich auf die gcc Version 3.4.5
btw. wegen Dev-C++: http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html
Danke auch für die in diesem Thread aufgezeigten Alternativen. Ich schau sie mir mal an, die Entwicklungsoberfläche ist mir aber im Grunde nicht so wichtig (es könnte auch ein Klartexteditor wie UltraEdit mit "Werkzeugen" im Menü und/oder Scriptinganbindung sein).
Danke & Gruss,
Rüdiger Plantiko
-
Den inoffiziellen Releases sind nicht inoffiziell, nur halt noch nicht produktiv, weil noch im Testing-Status.
Einfach mal unter GCC 4 nach schauen:
http://sourceforge.net/projects/mingw/files/