Forum: Compiler & IDEs fremden C-Code compilieren


von Seb (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe aus dem Netz von der Elektor einen C-Code gefunden und den 
wollte ich jetzt Compilieren.

Das programm besteht aus ein paar .c und .h Files und einem Makefile.
Mit den Makefiles habe ich noch nie gearbeitet.

Das Makefile habe ich in meinem AVR Studio in der Projektstruktur unter 
"Other Files" eingetragen und unter Projekt Options habe ich "Use 
external Makefile" angeklickt und habe das Makefile von dem Projekt dort 
angegeben.

Wenn ich dann den Code kompiliere kommt diese meldung

"
cc1.exe: error: missing argument to "-mmcu="
"

Wenn ich garkein Makefile angebe dann findet er irgendwie ein paar 
funktionen nicht dann kommen solche meldungen

../AVR-Studio/cube.c:61: error: 'CLEAR_CUBE' undeclared (first use in 
this function)
../AVR-Studio/cube.c:64: warning: implicit declaration of function 
'ani__blink_slow_to_fast'
../AVR-Studio/cube.c:66: error: 'NOT_INVERSE' undeclared (first use in 
this function)
und noch 7 weitere ähnliche meldungen

Ich habe das Makefile mal an den Beitrag gehangen weil da recht viel 
drin steht und dann muss man so im Forum scrollen.


hätte jmd ne Idee woran das kompilieren scheitert `?

von Karl H. (kbuchegg)


Lesenswert?

Ganz am Anfang deines Makefiles

###
# Select microcontroller target
###
# MCU = atmega16
# MCU = atmega32

###
# Select cpu frequency in herz and MHz
###
# F_CPU = 1000000
# F_CPU_MHZ = 1

# F_CPU = 8000000
# F_CPU_MHZ = 8


Kommentiere jeweils die Zeile aus, die bei dir zutrifft.


Im übrigen würde ich da kein externes Makefile nehmen. Ein neues Projekt 
für den gewünschten Prozessor anfangen, AVR-Studio machen lassen. Die 3 
Source Code Files ( animations.c, graphics.c, draw.c ) zum Projekt 
hinzufügen und durchcompilieren.


> Wenn ich garkein Makefile angebe dann findet er irgendwie
> ein paar funktionen nicht dann kommen solche meldungen
>
> ../AVR-Studio/cube.c:61: error: 'CLEAR_CUBE' undeclared
> (first use in this function)
> ../AVR-Studio/cube.c:64: warning: implicit declaration of
>  function 'ani__blink_slow_to_fast'
> ../AVR-Studio/cube.c:66: error: 'NOT_INVERSE' undeclared
>  (first use in this function)

Das hat aber nichts mit dem Makefile zu tun. Das dürfte einfach nur der 
Hinweis sein, dass das besch... programmiert ist.

von Sauger (Gast)


Lesenswert?

Moin,

ein Hinweis um welches "Elektor" Projekt es sich handelt steigert die 
Schoße auf eine Antwort, vielleicht erinnert sich dann jemand daran.

> cc1.exe: error: missing argument to "-mmcu="
da fehlt die Angabe zum verwendeten Prozessor.

lass das externe Makefile mal weg und setze ein frisches Projekt im AVR 
Studio auf.

MfG

von Seb (Gast)


Lesenswert?

sorry klar: es handelt sich um den 5x5x5 LED-Kubus:


Wo gebe ich denn den Prozessor noch an ? ich habe das Projekt über AVR 
erstellt und hab den ATMEGA32 angegeben. und habe dann die .c und .h 
Files in das neue Projekt eingefügt.


Das makefile hatte ich auch schon soweit geändert das sieht so aus jetzt
1
###
2
# Select microcontroller target
3
###
4
# MCU = atmega16
5
MCU = atmega32
6
7
###
8
# Select cpu frequency in herz and MHz
9
###
10
# F_CPU = 1000000
11
# F_CPU_MHZ = 1
12
13
F_CPU = 8000000
14
F_CPU_MHZ = 8

Fehler tritt aber weiterhin auf.

ich erstelle nochmal ein projekt neu ohne make file

von Seb (Gast)


Lesenswert?

mhm mit einem Neuen Projekt erstellen und ohne Makefile ist es leider 
nicht getan :/

von Karl H. (kbuchegg)


Lesenswert?

Nämlich?

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>mhm mit einem Neuen Projekt erstellen und ohne Makefile ist es leider
>nicht getan :/
fehler?

von Seb (Gast)


Lesenswert?

huch irgendwie ist der halbe text verschwunden.

Also es kommen immer noch die gleichen fehlermeldungen wie in dem ersten 
Projekt.

Ohne Makefile meckert er an den Funktionen rum und mit Makefile kommt 
wieder der fehler mit cc1.exe: error: missing argument to "-mmcu="

selbst wenn ich im Makefile den Prozessor und die Frequenz angebe.


wie könnte ich das noch überprüfen?

von Karl H. (kbuchegg)


Lesenswert?

Zumimdest ist mir beim schnellen Drüberschauen im Makefile nichts 
aufgefallen, was AVR-Studio nicht auch hinkriegen würde.

Wenn es also noch Fehler gibt (weiter oben ist ja schon so etwas 
angeklungen), so ist diesmal nicht die Entscheidung "Makefile/kein 
Makefile" der Übeltäter, sondern es handelt sich um ganz banale Fehler 
im Code.

@Seb
Auch wenn du dich jetzt wundern magst. Es ist beileibe kein Einzelfall 
und auch gar nicht so selten, dass insbesondere ältere 
Projekte/Programme nicht auf Anhieb compilierbar sind. Meistens sind es 
aber nur Kleinigkeiten, die ein C-Kenner schnell behoben hat.

von Karl H. (kbuchegg)


Lesenswert?

Seb schrieb:

> Ohne Makefile meckert er an den Funktionen rum und mit Makefile kommt
> wieder der fehler mit cc1.exe: error: missing argument to "-mmcu="

Mit Makefile kommt er erst gar nicht zum compilieren :-) Da hängst du 
bereits in der Vorstufe fest.

von Seb (Gast)


Lesenswert?

Karl Heinz kann ich dir die Files einfachmal schicken? vieleicht findest 
du das ja auf anhieb oder vieleicht läufts bei dir direkt.

von Detlev T. (detlevt)


Lesenswert?

Hallo seb,

vielleicht hast du auch bei der Konfiguration vom AVR Studio irgendetwas 
falsch gemacht und du suchst einfach nur den Fehler am falschen Ort. 
Versuche doch erst einmal mit "make" auf der Kommandozeile, ob das 
Makefile als solches funktioniert.

von Karl H. (kbuchegg)


Lesenswert?

@All

> Projekte/Programme nicht auf Anhieb compilierbar sind. Meistens sind es
> aber nur Kleinigkeiten, die ein C-Kenner schnell behoben hat.

Was denkt ihr? War der Hinweis zu subtil?


Klartext: Die noch verbleibenden Fehler haben höchst wahrscheinlich 
nichts mit dem Makefile zu tun! Du musst in den C-Source Code 
hineinschauen, um dem auf die Schliche zu kommen, was da los ist. Wenn 
du dabei Hilfe brauchst, dann poste den Source-Code (Alle 3 *.c Files, 
zugehörige Header Files)

Zippe alles zusammen und lade es hoch.
(Du kannst auch ganz einfach das komplette Projektverzeichnis zippen und 
hochladen, dann muss man nicht lange nachfragen, wenn etwas unklar ist)

von Seb (Gast)


Angehängte Dateien:

Lesenswert?

Ah ok Vielen Dank :)

Hier ist das Zip-File mit allen Daten die zu dem Projekt gehören

von Detlev T. (detlevt)


Lesenswert?

Bei mir läuft das Makefile glatt durch nachdem ich am Anfang die 
entsprechenden Zeilen "ent-" kommentiert hatte.

von Seb (Gast)


Lesenswert?

wie lässt man das denn "durchlaufen" und was muss kommentiert werden ?

von Karl H. (kbuchegg)


Lesenswert?

Die Lösung ist ganz einfach:
cube.c gehört gar nicht mit zum Projekt dazu.

Dein Projekt besteht aus den Dateien
monocube.c  animations.c draw.c
monocube.h  animations.h draw.h



cube.c dürfte ein Überbleibsel aus der Entwicklungsgeschichte sein. Wirf 
es aus dem AVR-Studio Projekt raus und alles wird gut.

von Detlev T. (detlevt)


Lesenswert?

Hallo Seb,

ich habe nur das Makefile so geändert, wie du oben schon beschrieben 
hast, und auf der Kommandozeile "make" + <enter> eingegeben. Ich habe 
avr-gcc Version 4.3.4 unter Ubuntu 10.4.

Gruß, DetlevT

von Seb (Gast)


Lesenswert?

Mhm so ma grad ein bisschen rumgespielt.
Sprich:

Neues Projekt angelegt mit atmega 32 und dann die 6 dateien
monocube.c  animations.c draw.c
monocube.h  animations.h draw.h
in das projekt eingefügt.


nun gibt er mir 12 fehlermeldungen raus:
diese wären:
1
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:120: undefined reference to `diagonal_lines'
2
animations.o: In function `ani__display_charset':
3
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:152: undefined reference to `charset'
4
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:152: undefined reference to `charset'
5
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:159: undefined reference to `charset'
6
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:159: undefined reference to `charset'
7
animations.o: In function `ani__big_bang':
8
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:203: undefined reference to `line_retangles'
9
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:203: undefined reference to `line_retangles'
10
animations.o: In function `_delay_ms':
11
c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: undefined reference to `line_retangles'
12
c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: undefined reference to `line_retangles'
13
c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: undefined reference to `line_retangles'
14
animations.o:c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: more undefined references to `line_retangles' follow

irgendwie sind die Funktionnen noch nicht richtig verknüpft.
oder ?

von Detlev T. (detlevt)


Lesenswert?

Irgendwie hast du graphics.c vergessen, oder?

Was willst du eigentlich? Das Projekt compilieren oder dich in AVR 
Studio einarbeiten?

von Karl H. (kbuchegg)


Lesenswert?

Detlev T. schrieb:
> Irgendwie hast du graphics.c vergessen, oder?

Das war mein Fehler :-)
Die hab ich übersehen als ich ihm die Aufstellung der Files gegeben 
habe.

> Was willst du eigentlich? Das Projekt compilieren oder dich in AVR
> Studio einarbeiten?

Es schadet nichts, wenn er lernt wie man fremden Code übernimmt und 
zumindest soweit abklappert, um aus einem Wust von Files diejenigen 
herauszusuchen die tatsächlich gebraucht werden.

von Karl H. (kbuchegg)


Lesenswert?

Seb schrieb:

> irgendwie sind die Funktionnen noch nicht richtig verknüpft.
> oder ?

Dann sieh nach, in welchem der C-Files diese Funktionen enthalten sind 
und füge dieses File noch zum Projekt hinzu.


Ein bischen selber mitdenken musst du schon.
So ist das nun mal bei der Arbeit mit µC. IC auf Platinen löten, 
einschalten und 'macht genau das was ich will' ohne wenigstens in 
Ansätzen zu verstehen was man da tut ... das war gestern.
µC stehen und fallen mit der Programmierung. Dort liegt das eigentiche 
Know-How. Und wenn man anpassen will, dann muss man dort eingreifen. Das 
geht aber nur dann, wenn man wenigstens ein wenig Ahnung von der Materie 
hat.
Und du wirst eingreifen wollen!
Denn schliesslich soll der Cube das anzeigen, was du dir vorstellst und 
nciht das was sich Elektor vorgestellt hat.

von Seb (Gast)


Lesenswert?

Ja das stimmt-

Ich werde mich da mal ein bisschen schlau machen und mir das anschauen 
:) wenns funktioniert geb ich bescheid **grins*

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.