Generic++ Library Compilierung
-
Hallo Leute,
ich versuche gerade die aktuelle Generic++ Bibliothek für meine CodeGear Turbo C++ 6 IDE zu compilieren.
Dazu folgte ich hübsch der Reihe nach der Anleitung:
To compile Generic++ for Borland Builder you must use our new “maketool” program. Just
perform the following steps:
• Set the environment variable GROOT, so that it points to the Generic++ root directory.
• Check the file $(GROOT)/win32/bb3/bb3.env (or $(GROOT)/win32/bb5/bb5.env). It
contains the environment settings used by the make tool. If your environment is already
set up for Borland Builder, you should only keep the definition of MAKE. If you have
several compilers on your machine, this is the perfect place to configure the make tool
for use with Borland Builder.
• Decide, which Generic++ configurations you want to compile. There are two predefined
configurations. Moreover you can easily create new configurations by creating your
own configuration files in the win32/bb3 configuration directory.
• genmd - multi-threaded debug version of Generic++
• genmp - multi-threaded production version of Generic++
• Open a command line window and go to the directory $(GROOT)/win32.• Enter the following command to compile all configurations. Of course you can ommit
the configurations that you do not need.
maketool -cbb3 genmd genmp
or:
maketool -cbb5 genmd genmpSoweit so gut - nur leider bricht er die compilierung mit 26 Fehlern ab und löscht alle Dateien. Das Manual ist für die Version 3.1(erschienen 2002) - ein neueres habe ich nicht gefunden.
Darin steht, dass die Bibliothek nur für Win NT und 95(ich benutze XP) ausgelegt ist - ich nehme aber mal an, dass das für die neueste Version nicht gilt - oder?
-
Wie sehen die 26 Fehler denn aus?
Felix
EDIT: Wie ist das denn passiert?
-
Wie sehen die 26 Fehler denn aus?
Felix
-
Also, ich kann es heute abend mal posten, wenn ich wieder zu hause bin ...
Danke soweit!
-
Win XP ist aus der NT-Reihe, die Unterschiede sollten eigentlich nicht SO groß sein, denke ich. Die Frage ist:
- wie standardkonform ist der Compiler deiner IDE?
- wie kompatibel ist er zum Borland Builder? Wenn das maketool irgendwelche Änderungen extra für den BCB macht kanns sein dass andere Compiler das nicht übersetzen können.
-
pumuckl schrieb:
Win XP ist aus der NT-Reihe, die Unterschiede sollten eigentlich nicht SO groß sein, denke ich. Die Frage ist:
Jo, das weiß ich - hätt'ja sein können ...
pumuckl schrieb:
- wie standardkonform ist der Compiler deiner IDE?
- wie kompatibel ist er zum Borland Builder? Wenn das maketool irgendwelche Änderungen extra für den BCB macht kanns sein dass andere Compiler das nicht übersetzen können.Tjaa... um ehrlich zu sein, ich weiß nicht, wie sehr der "Turbo C++" C++-Standard konform ist - kann man die Konformität messen ? Nein scherz beseite - ich denke, da er ebenfalls von CodeGear ist und dem Builder in praktisch allen Belangen ähnelt, sollte er zu diesem zumindest sehr konform sein.
-
So jetzt hab ich mal alles rauskopiert:
C:\gen3-5-3>cd win32 C:\gen3-5-3\win32>maketool -cbb5 genmd50 make -f makefile MAKE Version 5.2 Copyright (c) 1987, 2000 Borland make /f lib.mak MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -c -IC:\gen3-5-3\include -v -Od -w -r- -k -y -vi- -a8 -b- -Ve -Vx -DNPOST -tWM -w-com -w-eff -w-pia -w-par -w-csu -w-aus -w-rch -w-8071 -w-8084 - w-8001 -w-8027 -DG_ANSILIB ..\..\..\src\path\gdir.cpp Borland C++ 5.82 für Win32 Copyright (c) 1993, 2005 Borland ..\..\..\src\path\gdir.cpp: Fehler E2092 C:\gen3-5-3\include\gstat.h 96: Speicherklasse 'inline' ist hier ni cht erlaubt Fehler E2139 C:\gen3-5-3\include\gstat.h 96: In Deklaration fehlt ; Fehler E2303 C:\gen3-5-3\include\gstat.h 153: Typname erwartet Fehler E2238 C:\gen3-5-3\include\gstat.h 153: Bezeichner 'G_Stat::_int64' mehrfa ch deklariert Fehler E2344 C:\gen3-5-3\include\gstat.h 96: 'G_Stat::_int64' bereits deklariert Fehler E2139 C:\gen3-5-3\include\gstat.h 153: In Deklaration fehlt ; Fehler E2312 C:\gen3-5-3\include\gstat.h 71: 'theSize' ist keine eindeutige Basi sklasse von 'G_Stat' in Funktion G_Stat::G_Stat() Fehler E2092 C:\gen3-5-3\include\gstat.h 175: Speicherklasse 'inline' ist hier n icht erlaubt Fehler E2141 C:\gen3-5-3\include\gstat.h 175: Fehler in der Deklarationssyntax Fehler E2303 C:\gen3-5-3\include\gunord.h 123: Typname erwartet Fehler E2275 C:\gen3-5-3\include\gunord.h 123: { erwartet Fehler E2428 C:\gen3-5-3\include\gunord.c 45: Templates müssen Klassen oder Funk tionen sein Fehler E2141 C:\gen3-5-3\include\gunord.c 45: Fehler in der Deklarationssyntax Fehler E2451 C:\gen3-5-3\include\gmap.h 224: Undefiniertes Symbol 'G_Assoc' Fehler E2275 C:\gen3-5-3\include\gmap.h 224: { erwartet Fehler E2451 ..\..\..\src\path\gdir.cpp 46: Undefiniertes Symbol 'G_Assoc' Fehler E2401 ..\..\..\src\path\gdir.cpp 46: Ungültige Template-Argumentliste Fehler E2395 ..\..\..\src\path\gdir.cpp 46: Zuviel Argumente an Template 'G_Map< K,V,IMP>' übergeben Fehler E2040 ..\..\..\src\path\gdir.cpp 46: Deklaration nicht ordnungsgemäß abge schlossen Fehler E2451 ..\..\..\src\path\gdir.cpp 48: Undefiniertes Symbol 'G_StatInfo' Fehler E2188 ..\..\..\src\path\gdir.cpp 48: Ausdruckssyntax Fehler E2299 ..\..\..\src\path\gdir.cpp 48: Template-Spezialisierung kann aus 'G _ThreadVar<T>' nicht generiert werden Fehler E2270 ..\..\..\src\path\gdir.cpp 48: > erwartet Fehler E2040 ..\..\..\src\path\gdir.cpp 48: Deklaration nicht ordnungsgemäß abge schlossen Fehler E2451 ..\..\..\src\path\gdir.cpp 53: Undefiniertes Symbol 'pMap' in Funkt ion fileLessThan(const G_String &,const G_String &) Fehler E2228 ..\..\..\src\path\gdir.cpp 53: Zu viele Fehlermeldungen oder Warnun gen in Funktion fileLessThan(const G_String &,const G_String &) *** 26 Fehler bei der Compilierung *** ** error 1 ** deleting gdir.obj ** error 1 ** deleting all
Das passiert da...
-
pumuckl schrieb:
- wie kompatibel ist er zum Borland Builder? Wenn das maketool irgendwelche Änderungen extra für den BCB macht kanns sein dass andere Compiler das nicht übersetzen können.
Turbo C++ ist die Light-Version von C++Builder 2006; ähnlich wie die Express-Editionen von Microsoft. Der Compiler ist derselbe.
@Floyd: Die Fehler sehen nicht danach aus, als wäre unzureichende Standardkonformität das Problem. Sieh dir doch einfach mal die Stellen an, über die der BCC stolpert - vielleicht hat er ja recht?
Andernfalls kannst du die Stellen ja mal posten.
-
ja, das wollte ich sowieso machen.. bin nur bis eben gerade nicht zu gekommen...
-
Okay, sämtliche Fehler in gstat.h konnten durch ein simples ersetzen von "_int64" durch "long long" behoben werden.
Wo ich mir nicht sicher bin ist folgendes in gstat.cpp:
LARGE_INTEGER li; li.LowPart = theFindData.nFileSizeLow; li.HighPart = theFindData.nFileSizeHigh; theSize = _int64(li.QuadPart);
ich nehme mal an, die "_int64" hier ist eine typkonversion - ich ersetze durch (long long).
Welchen fehler (der dann erst erscheint) ich nicht verstehe ist:
int G_RegexParser::readInt(int &val) { val = -1; char buf[10]; int c, bpos = 0; while (isdigit(c = getChar(false))) { buf[bpos++] = (char)c; if (bpos >= 10) { error(SyntaxError); } } if (bpos > 0) { buf[bpos] = 0; val = atoi(buf); } else { error(SyntaxError); } return c; }
Fehler E2268 ..\..\..\src\regex\greparse.cpp 170: Aufruf der undefinierten Funkt ion 'isdigit' in Funktion G_RegexParser::readInt(int &) Warnung W8013 ..\..\..\src\regex\greparse.cpp 172: Wahrscheinliche Verwendung vo n 'c' vor Definition in Funktion G_RegexParser::readInt(int &) Fehler E2268 ..\..\..\src\regex\greparse.cpp 181: Aufruf der undefinierten Funkt ion 'atoi' in Funktion G_RegexParser::readInt(int &) *** 2 Fehler bei der Compilierung ***
Was soll "isdigit" denn sein ? das wird in keiner ähnlich klingenden Datei definiert - ist das so ein alter Kram, wie atoi ?(welches hier übrigens funktionieren sollte - mein tooltip-anzeige-debug sagt zumindest, dass er das (auch an der stelle da) kennt)
Wieso wird c hier wahrscheinlich vorher verwendet ? das übersteigt meine hobby C++ Kenntnisse...
-
isdigit ist in <cctype> deklariert, atoi in <cstdlib>.
Beide sind allerdings dem namespace std angehörig; vielleicht ist diese Bibliothek da etwas nachlässig.Die Warnung über die Benutzung von c dürfte eine Folge davon sein, daß der Compiler die Zeile mit isdigit nicht versteht, daher auch nicht analysiert, dennoch aber weiterzuarbeiten versucht.
-
Ihr seid super- Namespace spezifiziert und schon klappt es
... fast
Warning: '5' not found in library Warning: 'genmp50' not found in library Warning: library was too large for page size, rebuilt with page size 512 Warning: results are safe in file 'C:\libtmp0c.450' DOS-reported error: Permission denied renaming 'C:\gen3.LIB' to 'C:\gen3.BAK' ** error 1 ** deleting C:\gen3-5-3\win32.lib\bb5\genmp50.lib ** error 1 ** deleting all
äh ja ... also dieses libtmp40c.450 existiert tatsächlich - damit kann ich ja aber vermutlich nix anfangen oder? was ich mit den anderen warnungen machen soll, weiß ich gar nicht ... gibts in WIn32(oder hier anscheinend DOS!?!) auch chmod ? wie wende ich das so, an, dass das DOS keinen Fehler meldet ?
-
Hey hilfe
! Keine Ideen mehr ? Eigeniniative scheiterte gerade mal wieder...
-
Mhh.. ok, ich hab die gen3.lib mal selbst in BAK umbenannt, dann kommt er einen schritt weiter, scheitert aber daran, dass eine "genmd50.lib" in "win32.lib\bb5" nicht existiert - es scheint so, als könne er diese datei (aus welchen gründen auch immer) nicht erzeugen - ich glaube damit siehts wohl schlecht aus...