Forum: Compiler & IDEs MSPGCC mag nicht


von OldBug (Gast)


Lesenswert?

Hallo zusammen!

Ich habe mir das MSPGCC-Packet auf mein Win2k System installiert und
wollte jetzt endlich meine Projekte darauf umstellen, aber leider mag
der Compiler nicht :(
Ich habe in den default-ordner installiert und vorher noch MinGW
updated. Wenn ich den Compiler aus dem /bin Verzeichnis starte, dann
läuft er, wenn ich ihn aber aus irgend einem anderen Verzeichnis
starte, kommt die Fehlermeldung, daß "asprintf" nicht in der
cygwin1.dll gefunden werden konnte... Ich vermute, daß er die
cygwin1.dll gar nicht siht... was jetzt?

Gruß,
Patrick...

von OldBug (Gast)


Lesenswert?

Hi nochmal!

Der compiler läuft jetzt!
Allerdings gibts da mittlerweile ein anderes Problem:
test.o: In function `main':
test.o(.text+0x8e6): undefined reference to `puts'
test.o(.text+0x8fa): undefined reference to `puts'
test.o(.text+0x910): undefined reference to `puts'
test.o(.text+0x918): undefined reference to `puts'
test.o(.text+0x97c): undefined reference to `puts'
test.o(.text+0xa8e): more undefined references to `puts' follow

Ich habe eine eigene (mit IAR funktionierende) printf-implementation
und es sieht so aus, als ob dieses 'puts' das symbol für mein printf
ist...
Beim Kompilieren kommt kein fehler, erst beim linken...

Gruß,
Patrick...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Zu deinem ersten Problem:
Ich vermute dass sich noch eine alte Cygwin-DLL irgendwo in deinem
Windows-Verzeichnis befindet. Ersetze sie durch die beim Compiler
mitgelieferte, dann sollte es klappen.

MSPGCC kennt keine Funktion puts, die musst du für das gewünschte
Ausgabegerät selber schreiben. Aber wahrscheinlich musst du deine
printf-Funktion überhaupt nicht portieren, es gibt bereits uprintf() in
der MSPGCC-Standard-Library:

http://mspgcc.sourceforge.net/manual/x1108.html

von OldBug (Gast)


Lesenswert?

Hallo Andreas!

Also: Die printf-routine wird nicht auf puts zurückgeführt! Der Pfad
müsste ungefähr so aussehen:
printf -> print -> print[s|i|l] -> printchar -> putchar

putchar ist ein PP-Makro und ist so definiert:
#define putchar(c)    TXBUF0 = c; \
        while ((IFG1 & UTXIFG0) == 0)

Ich weis nicht mal, wo der compiler das puts her nimmt...

Gruß,
Patrick...

von OldBug (Gast)


Lesenswert?

Hi nochmal!

Ich habe so die vermutung, daß der Compiler sich irgendwo her ein
anderes printf holt! Wenn ich mein printf umbenenne, dann kommt dieser
Fehler nicht!

Aber wo her?

Gruß,
Patrick...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Der Compiler darf alle Standardfunktionen intern ersetzen, deshalb muss
man für selbstgeschriebene Funktionen andere Namen wählen.

von OldBug (Gast)


Lesenswert?

Das heisst: Ich kann keine Standardfunktion überlagern?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.