PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Crosscompiler m68k-elf-gcc FETTES PROB!



C-64
20-05-2003, 13:34
HI!

Ich habe ein riesengroßes Problem mit einem Crosscompiler m68k-elf-gcc auf einem Suse-Linuxsystem für ein embedded system Motorola Coldfire.

Ich habe viele C- und H-Files zu kompilieren dass ich mit "make" mache.
(make xconfig <-'
make user_only <-'

Es kommt aber vor dass in einer C-Dateie mehrere Headerdateien inkludiert werden und diese vom Kompiler anscheinend ignoriert werden!
(ex) #include "bitbyte.h"

Deswegen sind viele Datentypen nicht definiert und ich bekomme Errors im C-File.

Was kann die Ursache sein? Die include-Zeilen sind ganz normal am Anfang der Datei. (Nachdem ich die Kommentare, Direktive ... hinaus geworfen habe.
Der Compiler hatte auch Probleme mit "//" Kommentare !! wieso weiß ich auch nicht!)
Ich denke an falsch konfigurierte Parameter, Überschneidungen, OS-Inkompatibilität oder sonst was.
Ich habe mir auch den Pre-compiler-Prozess angesehen, der H-Source wird eingebunden.

VERZWEIFLUNG !!
Bitte um einen kleinen Hinweis, Ratschlag, ...!
Ralf

anda_skoa
20-05-2003, 13:44
Möglicherweise sind die nötigen Deklarationen mit irgendwelchen #ifdef geschützt, die nicht definiert sind.

Kommt zB vor, wenn man mit -ansi kompiliert und Sachen nicht im ANSI C Standard enhalten sind.

Das mit den // Kommentaren ist ok, das sind C++ Style Kommentare.
C Kommentare sind immer /* */

Ciao,
_

C-64
20-05-2003, 14:27
Hi, danke für deine Antwort

Von ungefähr 1000 CPP-Kommentare wollte er drei nicht nehmen! Das kann ich mir nciht erklären (Außerdem sollte dieser moderne Kompiler die beiden Kommentarformen unterstützen!!)

Welche #ifdef's meinst du?In der C-Datei befindet sich keine einzge ifdef-Direktive mehr.
-----------------
|#include <coldfire.h>
|#include <bitbyte.h>
|...
|...
-----------------

Ich auch mal angenommen dass der Kompiler mit dem DAtentypen ein Problem hat. 3 ineinander verschachtelte Struktur, wobei eine als Datentyp und die beiden anderen als Struktur definiert sind. Mit komplett abgespeckt (nur main.c mit Datentyp-Initialsierung und #inklude's) funktioniert es ...

ein zerstörter Ralf :)

anda_skoa
20-05-2003, 14:33
Original geschrieben von C-64
Von ungefähr 1000 CPP-Kommentare wollte er drei nicht nehmen! Das kann ich mir nciht erklären (Außerdem sollte dieser moderne Kompiler die beiden Kommentarformen unterstützen!!)


Da gehts weniger ums unterstützen, als um den Modus.
Der gcc kann sehr wohl C++ Style Kommentare, aber wenn die mit -ansi -pedantic kompilierst, darf er sie nicht durchgehen lassen.



Welche #ifdef's meinst du?In der C-Datei befindet sich keine einzge ifdef-Direktive mehr.


Ich meinte in den Headern.
Kommt öfter vor, dass dort Sachen zB mit __GNU__ markiert sind, wenn es eine GNU Erweituerng ist, oder __BSD__ wenn es BSD kompatible API ist, die nicht im Standard C enthalten ist, etc.

Ciao,
_

C-64
20-05-2003, 15:52
Dann soll er entweder keinen oder alle akzeptieren! Das gibt es ja nicht dass er diese 3 nicht nimmt und die anderen schon...Diskriminierung...


Folgende Makros sind enthalen:
__RTX51TNY_H__
__mp__

kann nicht sein dass die etwas neg. bewirken...

C-64
21-05-2003, 08:59
auf jeden fall danke für deine Ratschläge!

Was ha das #pragma's SAVE ... auf sich? Welche (precompiler-?)Direktive ist das? Er scheint damit Probleme zu haben ...

ciao,
Ralf

anda_skoa
21-05-2003, 11:27
Hmm #pragma Direktiven sind sehr oft compilerspezifisch.
Ich hab selbst noch nie eine benutzt, kann dir da leider nicht weitergelfen.

Eventuell steht dazu was in der info Page des gcc

Ciao,
_

C-64
22-05-2003, 10:33
hi

sagt mal, wisst ihr (wenn da noch wer mit lesen sollte!!)
wie man den Compiler parametriert dass er nicht die includes durcheinander bringt bzw. gar nicht inkludiert. Er reagiert nämlich fehlerhaft auf:
#include "header.h"
Variablendeklaration
#include "header2.h"
Variablendeklaration

ahhhhhhh !! %-|
Das erklärt auch warum der Precompiler richtig zusammensetzt und es beim Compiler scheitert. Vielleicht ist er auf ansi gestellt...oder? Die Frage ist wie man ihn richtig parametriert!ist es eine ansi-einstellung? pedantic ? ....

Danke
Ralf