G++ 2.95.2 versus g++ 2.7.2

Hallo Leute,

ich versuche gerade den M68000 Emulator „bsvc“ (source gibts unter http://www2.ncsu.edu/eos/service/ece/project/bsvc/www/) unter SuSE 7.0 zu compilieren.

Voraussetzung für die Software ist der Gnu C++ compiler 2.7.2 oder neuer. SuSE 7.0 enthält 2.95.2 – definitiv neuer.

Leider scheint der Compiler auch pingeliger geworden zu sein. Ich bekommen säckeweise Fehler der Art

make[2]: Entering directory /usr/src/new/bsvc-2.1/src/sim68000/devices' g++ -I/usr/src/new/bsvc-2.1/src/Framework -O -ansi -Wall -D\_G\_NO\_EXTERN\_TEMPLATES -c RAM.cxx g++ -I/usr/src/new/bsvc-2.1/src/Framework -O -ansi -Wall -D\_G\_NO\_EXTERN\_TEMPLATES -c M68681.cxx M68681.cxx: In method M68681::~M68681()’:
M68681.cxx:293: implicit declaration of function int kill(...)' make[2]: \*\*\* [M68681.o] Error 1 make[2]: Leaving directory /usr/src/new/bsvc-2.1/src/sim68000/devices’
make[1]: *** [subdirectories] Error 1
make[1]: Leaving directory `/usr/src/new/bsvc-2.1/src/sim68000’
make: *** [subdirectories] Error 1

Jetzt bin ich weder C noch C++ Experte. Gibt es einen einfachen Weg, das Programm so zu modifizieren, dass es sich leicht kompilieren lässt? Oder gibt es einen compiler switch, mit dem man das Verhalten der älteren Versionen (die bei diesen Fehlern wohl nur Warnungen gegeben haben) zu erzwingen? Sowas wie g++ -fnicht_pigelig …

Danke für Hinweise!

Gruss

Jens

Moin,

Jetzt bin ich weder C noch C++ Experte. Gibt es einen
einfachen Weg, das Programm so zu modifizieren, dass es sich
leicht kompilieren lässt?

Vielleicht. Versuch mal, auf der Webseite oder in einer Mailinglist zu fragen.

Oder gibt es einen compiler switch, mit dem man das
Verhalten der älteren Versionen (die bei diesen Fehlern
wohl nur Warnungen gegeben haben) zu erzwingen?
Sowas wie g++ -fnicht_pigelig …

Das wird nichts nützen. Vielleicht bekommst Du dann keine keine Warnungen mehr, aber das Programm wird auch nicht laufen.

Frag mal die Emulator-Leute oder gib nochmal konkret an, wie Du die Übersetzung gestartet hast.

Thorsten

[…]

Vielleicht. Versuch mal, auf der Webseite oder in einer
Mailinglist zu fragen.

Habe auf der Mailingliste gefragt. Leider gibt es nur eine Antwort. Es gab noch jemanden, dem es so ergangen ist. Dieser Mensch war in der Lage den Source-Code zu modifizieren, hat aber die modifizierte Version gelöscht. Immerhin wurde mir eine
Binär-Version angeboten. Ich würde aber doch gerne wissen, wie man ältere Sourcen mit dem neuen Compiler übersetzt. Das kann mir ja noch öfter passieren :frowning:

[…]

Frag mal die Emulator-Leute oder gib nochmal konkret an, wie
Du die Übersetzung gestartet hast.

Ich habe im src-Verzeichnis nach der Ordnungsgemäßen Änderung der Makefile.common einfach

make -f Makefile.Linux eingegeben.

Zwischenzeitig hatte ich noch den -traditional Switch beim Aufruf des C++ Compilers eingebaut. Hat aber nichts gebracht.

Gruss

Jens

Moin,

Zwischenzeitig hatte ich noch den -traditional Switch beim
Aufruf des C++ Compilers eingebaut. Hat aber nichts gebracht.

Ich hab’s jetzt auch mal versucht. Bei gibt es einen anderen Fehler, der ebenso ‚richtig‘ ist, dh.: Kein Wunder, daß der Compiler an dieser Stelle meckert. Such nach einer älteren Version und versuch’s damit.

Thorsten

Hi,

g++ -I/usr/src/new/bsvc-2.1/src/Framework -O -ansi -Wall

-Wall heisst Warn all. Wenn Du die option rausnimmst kriegst Du
schonmal keine Warnungen mehr (die kann man i.d.R. ignorieren,
unterschiedliche Compiler-Versionen unterscheiden sich oft stark
im Warning-Verhalten).

-D_G_NO_EXTERN_TEMPLATES -c RAM.cxx

.cxx klingt nach c++, ich weiss nicht, ob das mit -ansi option
hinhaut … die sorgt meines Wissens fuer die Unterstuetzung von
ANSI-C … welches sich an einigen Stellen von C++ unterscheidet.

M68681.cxx:293: implicit declaration of function `int kill(…)’

Das liegt entweder an der -ansi option oder an der verwendeten
Library, nicht am Compiler. Bevor eine Funktion oder Variable
verwendet wird, muss sie deklariert werden, das ist im obigen
Fall nicht geschehen (pasiert normalerweise in Header-Files).
Entweder gibt es in der von Dir verwendeten library Version diese
Funktion nicht, oder es liegt daran, dass bei C++ eine leere
Argumenten-Liste fuer keine Argumente steht, waehrend sie bei C
fuer beliebige Argumente steht (oder umgekehrt oder so …).
kill(…) ist vermutlich das kill aus signal.h das ungefaehr dem
shell-commando kill entspricht. Ich waere ziemlich erstaunt, wenn
es diese Funktion nicht mehr gaebe. Sie kann hoechstens in einen
anderen header gewandert sein - aber auch das ist
unwahrscheinlich. Vermutlich haengt es also an der
Sprachkompatibilitaet. Schau Dir mal die entsprechenden Optionen
bei gcc (gcc und g++ sind im Grunde das gleiche) an.

Jetzt bin ich weder C noch C++ Experte. Gibt es einen
einfachen Weg, das Programm so zu modifizieren, dass es sich
leicht kompilieren lässt? Oder gibt es einen compiler switch,
mit dem man das Verhalten der älteren Versionen (die bei
diesen Fehlern wohl nur Warnungen gegeben haben) zu erzwingen?
Sowas wie g++ -fnicht_pigelig …

Entschuldigung im voraus: info gcc ;->
Das Teil hat dermassen viele Optionen … es geht jedenfalls, ob
das allerdings Deine Probleme loest weiss ich nicht.

Gruss

Thorsten