Forum: Compiler & IDEs Clean Problem


von Torben (Gast)


Lesenswert?

Hallo,
ich bekomme immer bei einem Clean folgendes:
1
Cleaning project:
2
rm -f test.hex
3
rm -f test.eep
4
rm -f test.cof
5
rm -f test.elf
6
rm -f test.map
7
rm -f test.sym
8
rm -f test.lss
9
rm -f test.o  
10
rm -f test.lst
11
rm -f test.s
12
rm -f test.d
13
rm -f .dep/*
14
chmod 755 test.elf
15
chmod: test.elf: No such file or directory
16
make: *** [end] Error 1
17
CLEAN FAILED (exit value 2, total time: 76ms)
hier mal der Makefile Ausschnitt:
1
clean: begin clean_list end
2
3
clean_list :
4
  @echo
5
  @echo $(MSG_CLEANING)
6
  $(REMOVE) $(TARGET).hex
7
  $(REMOVE) $(TARGET).eep
8
  $(REMOVE) $(TARGET).cof
9
  $(REMOVE) $(TARGET).elf
10
  $(REMOVE) $(TARGET).map
11
  $(REMOVE) $(TARGET).sym
12
  $(REMOVE) $(TARGET).lss
13
  $(REMOVE) $(OBJ)
14
  $(REMOVE) $(LST)
15
  $(REMOVE) $(SRC:.c=.s)
16
  $(REMOVE) $(SRC:.c=.d)
17
  $(REMOVE) .dep/*

Woran kann das liegen?

von Klaus W. (mfgkw)


Lesenswert?

das liegt daran, daß du test.elf erst löschst und dann mit
chmod die Rechte dafür setzen willst.

von Torben (Gast)


Lesenswert?

Ja aber im Makefile setze ich doch nirgend wo die Rechte, oder? Das war 
ein fertiges Template.

von Klaus W. (mfgkw)


Lesenswert?

Du zeigst ja weder das ganze makefile, noch den Aufruf.
Irgendwo wird das chmod schon stehen...

von Torben (Gast)


Lesenswert?

Ich habe jetzt einfach mal das Makefile aus der Wiki genommen. Da hat 
sich ja einiges geändert zu meinem. Nur jetzt bekomme ich:

error: target system does not support the "dwarf-2" debug format

ach noch was in meinem Makefile wurde
F_CPU = 16000000

geutzt, in dem der Wiki
F_OSC = 16000000

kommt das aufs gleiche?

von Peter (Gast)


Lesenswert?

Welchen Compiler und welchen Prozessor verwendest Du? Gibt es dazu keine 
IDE welche Dir das Makefile-Gefummel abnimmt?

von Torben (Gast)


Lesenswert?

Compiler ist gcc-mp-4.4 CPU Atmega32. Ich nutze Mac, deswegen ist es mit 
einer IDE problematisch. Da nutze ich NetBeans. Das hat leider keine AVR 
Integration.

von Torben (Gast)


Lesenswert?

Das mit dem Debug habe ich durch: DEBUG = stabs beseitigt. Nun meckert 
er wegen:

cc1: error: unrecognized command line option "-fwhole-program"

von Torben (Gast)


Lesenswert?

also wenn ich -fwhole-program entferne funktioniert es. Aber kann man 
das bedenkenlos machen?

von eklige Tunke (Gast)


Lesenswert?

Torben schrieb:
> Compiler ist gcc-mp-4.4 CPU Atmega32. Ich nutze Mac, deswegen ist es mit
> einer IDE problematisch. Da nutze ich NetBeans. Das hat leider keine AVR
> Integration.
Code::Blocks
Eclipse

Und bei NetBeans scheinst du dich zu irren, ist zwar für Arm, ansich 
musst du einfach nur auf avr ummünzen und gut ist.
http://www.mikrocontroller.net/articles/Einstieg_in_die_ARM_Entwicklung#Netbeans_IDE

von Torben (Gast)


Lesenswert?

Das NetBeans klappt ja auch, bis auf den Compiler Fehler jetzt mit dem 
neuen Makefile.

von Klaus W. (mfgkw)


Lesenswert?

Torben schrieb:
> also wenn ich -fwhole-program entferne funktioniert es. Aber kann man
> das bedenkenlos machen?

Hau es weg, du wirst es nicht vermissen.

von Klaus W. (mfgkw)


Lesenswert?

PS: vielleicht hast du eine uralte gcc-Version und mit einer neueren 
weniger Ärger?

von Torben (Gast)


Lesenswert?

Ich habe Version 4.0.2. Das ist die neuste, die es über Macports gab.

von Torben (Gast)


Lesenswert?

Gut der Compiler scheint doch nciht aktuell zu sein. Jetzt habe ich den 
neusten und es erben sich folgende Phänomene:


mit -fwhole-program

undefined reference to ...

für alle Funktionen, die ich in der Main aufrufe, und welche in einer 
anderen Datei definiert sind. Und ohne geht es.

von Klaus W. (mfgkw)


Lesenswert?

hast du die anderen Dateien auch mal neu kompiliert oder nur mit dem 
alten?

von Torben (Gast)


Lesenswert?

Welche anderen meinst du? Die anderen Sources müsste es ja automatisch 
machen die habe ich ja hier angegeben:

SRC += $(TARGET).c...

von Klaus W. (mfgkw)


Lesenswert?

Aber make geht nur nach Dateidatum.
Wenn du die noch mit dem alten Compiler übersetzt hast, dann den
Compiler wechselst und die Quelltexte nicht editierst, wird make
die auch nicht neu übersetzen lassen.
Schließlich sind die Objektdateien doch neuer als die Quellen -
für make also aktuell kompiliert.

make weiß doch nicht, daß der Compiler getauscht wurde und damit die
Objektdateien veraltet sind.

Es kann ja sein, daß es nur klappt, wenn alles neu übersetzt wird.

Bei sowas macht man doch ein make clean und übersetzt dann neu.

von Torben (Gast)


Lesenswert?

Ja make clean habe ich schon gemacht. Bringt aber auch nix.

von Klaus W. (mfgkw)


Lesenswert?

dann lass halt das -fwhole-program weg; ohne scheint es ja zu gehen

von Klaus W. (mfgkw)


Lesenswert?

Die Option sagt ja auch, daß keine Funktionen nach außen bekannt
gemacht werden sollen (kann also nur gehen, wenn alles in einer
Datei steht).
Hast du mehrere Dateien, musst du die Option weglassen.

http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#Optimize-Options

von Torben (Gast)


Lesenswert?

Ja werde ich wohl machen müssen. Mich würde trotzdem interessieren, 
woran das liegt.

von Peter (Gast)


Lesenswert?

Torben schrieb:
> Mich würde trotzdem interessieren, woran das liegt.

kann es sein das du *.c datein mit include eingebunden hast?

von Torben (Gast)


Lesenswert?

Nein alles über Header.

von ... (Gast)


Lesenswert?

-fwhole-program kann nur funktionieren, wenn es nur einen einzigen 
gcc-Aufruf mit allen .c Dateien auf einmal gibt. Also so etwa:
gcc f1.c f2.c f3.c ...
Oder wenn es generell nur ein einziges .c File gibt.
Wenn mehrere Sourcefiles einzeln kompiliert werden und erst anschließend 
zusammengelinked, dann geht -fwhole-program prinzipiell nicht und man 
muß es weglassen. Der gcc sieht dann halt niemals das komplette Program, 
sondern immer nur jeweils kleine Teile davon.

CU

von Torben (Gast)


Lesenswert?

Ah danke klingt logisch bis jetzt wird jede Datei einzeln compiliert, 
und anschließend alles gelinkt. Und wenn nur die main compiliert wird. 
Fehlt der Rest beim Linken.

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.