Forum: Compiler & IDEs Wie erzeugt mal eine *.a Datei?


von David V. (vergossen)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

als µC-Neuling möchte ich mich nun mit dem Speichern von Dateien auf 
eine SD-Karte beschäftigen,nachdem mir hier viele Menschen dabei 
geholfen haben,  die USART-Schnittstelle richtig zu programmieren.

Also ich habe einen ATMega128 und benutze zum Programmieen das 
AVR-Studio. Das macht ja vieles schon automatisch. An den ATMEga128 
würde ich gern eine SD-Karte anschließen. Den Adapter habe ich mir 
bereits gebastelt. Jedoch habe ich den Adapter nach folgender Webseite 
angefertigt: 
http://www.ulrichradig.de/site/atmel/avr_mmcsd/gfx/MMCSDSCH.JPG
Dadurch kann ich nämlich mein auf 5V betriebenes Board weiter verwenden, 
ohne eine Aufwändige Änderung vornehmen zu müssen.

Nun habe ich folgendes Problem:
In der Anleitung zum Filesystem steht auf Seite 9 unter anderem:
3. Copy Makefile-AVR to Makefile.
MEine Frage dazu ist: Soll ich erstmal das AVR-Studio starten und ein 
neues Projekt starten, was ich beispielsweise SD-Karte nenne? Das 
AVR-Studio legt dann nämlich gleich einige Ordner an und in einem Ordner 
steht auch etwas mit dem Namen Makefile. Soll ich nun dieses Makefile 
löschen und es durch das Makefile-AVR ersetzen und Makefile-AVR dann 
anschließend wieder in Makefile umbennennen? Ich weiß einfach nicht 
genau, was ich da tun soll.

4. Copy conf/config-sample-avr.h to conf/config.h
KAnn ich machen, aber in welchen ordner soll ich das schreiben?

Jetzt kommt das größere Problem:
5. Compile the library ( make lib ). Now you should have libefsl.a in 
the efsl directory.

Wie soll ich dieses make lib machen? Was soll ich da machen, damit mir 
das AVR-Studio so eine *.a Datei erzeugt?

Über eure Hilfe würde ich mich wirklich sehr freuen. Ich komme nämlich 
sonst keinen Schritt weiter.

Viele Grüße,

David

von David V. (vergossen)


Lesenswert?

Hätte ich dieses Problem besser in einem Anderen Tehmenbereich gepostet, 
oderwarum antwortet mir keiner?

David

von Uhu U. (uhu)


Lesenswert?

Wirf doch einfach mal einen Blick in den make-File 'lib' - dann wirst du 
sehen, wie eine .a-Datei erzeugt wird.

make ist das Programm, das die Anweisungen ausführt, die efsl/libefsl.a 
erzeugen.

Das .a kommt übrigens von 'archiver' - das ist der Name des 
Unix-Bibliothekverwalters.

von David V. (vergossen)


Lesenswert?

Hallo,

leider kenne ich mich zu wenig aus mit sowas. eshalb poste ich ja hier. 
Flgendes steht in dem Makefile drin:

////////////////////////////////////////////////////////////////////
COPT=-g3 -Wall -Os -mmcu=atmega128
INCLUDEDIRS=-Iinc -Iconf
CFLAGS=$(COPT) $(INCLUDEDIRS)
CC=avr-gcc
AR=avr-ar
OBJCOPY=avr-objcopy
OBJ=src/efs.o src/plibc.o src/disc.o src/partition.o src/time.o src/fs.o 
src/fat.o src/file.o src/dir.o src/mkfs.o src/debug.o src/ioman.o 
src/ui.o src/extract.o src/interfaces/atmega128.o src/interfaces/sd.o

all: lib

lib: $(OBJ)
  $(AR) rcs libefsl.a $(OBJ)

clean :
  rm -f $(OBJ) libefsl.a
////////////////////////////////////////////////////////////////////

aber leider sagt mir das nichts. Und ich verstehe jetzt immer noch 
nicht, wie ich meine libefsl.a erzeugen kann.
Ich bin Anfänger und benutze unter WindowsXP das AVR-Studio. Habe kein 
Linux.
Wie startet man beispielsweise das Programm Make? Ist es vielleicht 
schon im AVR-Studio implementiert? Muss doch eigentlich, da das 
AVR-Studio automatisch ein Makefile erzeugt.

Wäre um ausführlichere Tipps sehr dankbar.

von Oliver (Gast)


Lesenswert?

>Was soll ich da machen, damit mir das AVR-Studio so eine *.a Datei erzeugt?

Nix. AVR-Studio ist dafür das falsche tool. Mit fertigen makefiles kann 
AVR-Studio nichts (oder nicht viel) anfangen.

Wenn du die Dateien so, wie vorgesehen, umbenannt und kopiert hast, 
machts du einfach ein command-Window ("DOS-Box") auf und wechselst damit 
in das entsprechende Verzeichnis. Dann tippst du "make", und der Rest 
sollte alleine gehen.

Wenn deine WINAVR-Installation mit dem fertigen makefile nicht 
funktioniert, bastelst du dir selber ein neues. Das geht am einfachsten 
mit MFile.

Die fertige lib kann dann in AVR-Studio-Projekte eingebunden werden.

Oliver

von David V. (vergossen)


Lesenswert?

Hallo Oliver!
Das probiere ich jetzt gleich mal aus. Werde mich wieder melden !
Danke schonmal.
David

von David V. (vergossen)


Lesenswert?

Hallo,

so jetzt habe ich es geschafft eine libefsl.a-Datei zu erzeugen. Kann 
man den Ordner, in dem sich diese Datei befindet eigentlich nach der 
Kompilierung woanders hinkopieren, oder ist der dann ortsgebunden?

Leider funktioniert das alles nicht so richtig.
Wenn ich im ARV-Studio links unter Headefiles das efs.h hinzufüge, dann 
bekomme ich trotzdem eine Fehlermeldung vom AVR-Studio, die wie folg 
lautet: "efs.h" no such file or directory. Wieso versteht das AVR-Studio 
nicht, dass die Dateien doch vorhanden sind? Ich habe sogar alle 
.h-Dateien in den selben Ordner kopiert, in dem sich auch die .c-Datei 
befindet.

Wäre echt nett, wenn ihr mir mehr Tipps geben könntet.

David

von Oliver (Gast)


Lesenswert?

Kannst du die genaue(n) Fehlermeldung(en) mal posten?

Oliver

von David V. (vergossen)


Lesenswert?

Hi 'Oliver!

Hier die Fehlermeldungen:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

rm -rf SD-Karte.o  SD-Karte.elf dep/* SD-Karte.hex SD-Karte.eep
Build succeeded with 0 Warnings...
avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2 -O0 -MD -MP -MT SD-Karte.o 
-MF dep/SD-Karte.o.d  -c  ../SD-Karte.c
../SD-Karte.c:1:17: error: efs.h: No such file or directory
../SD-Karte.c:6: warning: return type of 'main' is not 'int'
../SD-Karte.c: In function 'main':
../SD-Karte.c:7: error: 'EmbeddedFileSystem' undeclared (first use in 
this function)
../SD-Karte.c:7: error: (Each undeclared identifier is reported only 
once
../SD-Karte.c:7: error: for each function it appears in.)
../SD-Karte.c:7: error: expected ';' before 'efs'
../SD-Karte.c:8: error: 'EmbeddedFile' undeclared (first use in this 
function)
../SD-Karte.c:8: error: expected ';' before 'file_r'
../SD-Karte.c:12: warning: implicit declaration of function 'debug_init'
../SD-Karte.c:14: warning: implicit declaration of function 'DBG'
../SD-Karte.c:14: warning: implicit declaration of function 'TXT'
../SD-Karte.c:16: warning: implicit declaration of function 'efs_init'
../SD-Karte.c:16: error: 'efs' undeclared (first use in this function)
../SD-Karte.c:20: warning: implicit declaration of function 'file_fopen'
../SD-Karte.c:20: error: 'file_r' undeclared (first use in this 
function)
../SD-Karte.c:24: error: 'file_w' undeclared (first use in this 
function)
../SD-Karte.c:28: warning: implicit declaration of function 'file_read'
../SD-Karte.c:28: warning: suggest parentheses around assignment used as 
truth value
../SD-Karte.c:29: warning: implicit declaration of function 'file_write'
../SD-Karte.c:32: warning: implicit declaration of function 
'file_fclose'
../SD-Karte.c:35: warning: implicit declaration of function 'fs_umount'
../SD-Karte.c:9: warning: unused variable 'i'
../SD-Karte.c: In function 'hang':
../SD-Karte.c:43: warning: implicit declaration of function '_NOP'
make: *** [SD-Karte.o] Error 1
Build failed with 10 errors and 13 warnings...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Gruß,
David

von David V. (vergossen)


Angehängte Dateien:

Lesenswert?

@ Oliver:

Dieses Testprogramm (Siehe Anhang), welches ich mit runtergeladen habe , 
habe ich ausprobiert und dann kamen die Fehlermeldungen, die ich dir 
eben gepostet habe. Ich habe es im AVR-Studio in SD-Karte.c umgetauft, 
da das Gesamtprojekt diesen Namen trägt.

David

von holger (Gast)


Lesenswert?

>#include <efs.h>

Versuchs mal mit

#include "efs.h"

efs.h alleine reicht aber noch nicht. Schau da mal
rein welche *.h Dateien noch benötigt werden !

von David V. (vergossen)


Lesenswert?

Hi!
Habe geschaut welche .h-Dateien noch benötigt werden und habe die 
Dateipfade so angepasst, dass sie auch gefunden werden.

Leider kommen nun fogende Fehlermeldungen:

Build started 15.7.2007 at 18:28:08
avr-gcc.exe -mmcu=atmega128  SD-Karte.o     -o SD-Karte.elf
SD-Karte.o: In function `main':
../SD-Karte.c:12: undefined reference to `debug_init'
../SD-Karte.c:14: undefined reference to `debug'
../SD-Karte.c:16: undefined reference to `efs_init'
../SD-Karte.c:20: undefined reference to `file_fopen'
../SD-Karte.c:24: undefined reference to `file_fopen'
../SD-Karte.c:29: undefined reference to `file_write'
../SD-Karte.c:28: undefined reference to `file_read'
../SD-Karte.c:32: undefined reference to `file_fclose'
../SD-Karte.c:33: undefined reference to `file_fclose'
../SD-Karte.c:35: undefined reference to `fs_umount'
make: *** [SD-Karte.elf] Error 1
Build failed with 10 errors and 0 warnings...


Gruß,
David

von holger (Gast)


Lesenswert?

Du musst die libefsl.a als LIB mit dazulinken.
Wie das im AVRStudio geht weiss ich aber nicht.

von David V. (vergossen)


Lesenswert?

Wäre nett, wenn mir einer sagen könnte, wie man die libefsl.a als LIB im 
AVR-Studio mit dazulinken kann.

von David V. (vergossen)


Lesenswert?

So, unter Project->Configuration Options->Libraries kann man per 
Mausklick *.a-Dateien hinzufügen.

Dass das funktionier, habe ich hier gefunden:
Beitrag "Peter Fleurys library einbinden fehlgeschlagen"

Das habe ich dann auch gemacht und siehe da, ich habe nur noch eine 
einzige Fehlermeldung. Wenn mir da jetzt noch einer sagen könnte, was 
das bedeutet, dann habe ich es geschafft, hoffe ich.

Hier die Ausgabe der Fehlermeldung:


rm -rf SD-Karte.o  SD-Karte.elf dep/* SD-Karte.hex SD-Karte.eep
Build succeeded with 0 Warnings...
avr-gcc.exe -I"D:\Eigene Dateien\Eigene 
Dokumente\Uni\Diplomarbeit\Mikrocontroller\Projekte\SD-Karte\conf" 
-mmcu=atmega128 -Wall -gdwarf-2 -O0 -MD -MP -MT SD-Karte.o -MF 
dep/SD-Karte.o.d  -c  ../SD-Karte.c
../SD-Karte.c: In function 'main':
../SD-Karte.c:28: warning: pointer targets in passing argument 3 of 
'file_read' differ in signedness
../SD-Karte.c:28: warning: suggest parentheses around assignment used as 
truth value
../SD-Karte.c:29: warning: pointer targets in passing argument 3 of 
'file_write' differ in signedness
../SD-Karte.c:9: warning: unused variable 'i'
avr-gcc.exe -mmcu=atmega128  SD-Karte.o    -lefsl  -o SD-Karte.elf
c:\winavr-20070525\bin\..\lib\gcc\avr\4.1.2\..\..\..\..\avr\bin\ld.exe: 
cannot find -lefsl
make: *** [SD-Karte.elf] Error 1
Build failed with 1 errors and 4 warnings...


Gruß,
David

von Simon K. (simon) Benutzerseite


Lesenswert?

Dein Linker findet eine angegebene Datei nicht ("-lefsl")

von David V. (vergossen)


Lesenswert?

Kann mir einer sagen, woher diese Datei kommt? Müsste ich sie eigentlich 
mit runtergeladen haben? Oder entsteht sie wenn man make macht? Ich 
frage mich, wieso diese Datei nicht da ist. Habe sie mit der Windows 
Suchfunktion gesucht, finde sie aber nicht. Was mache ich denn jetzt?

David

von Simon K. (simon) Benutzerseite


Lesenswert?

David V. wrote:
> KAnn mir einer sagen, woher diese Datei kommt? Müsste ich sie eigentlich
> mit runtergeladen haben? Oder entsteht sie wenn man make macht? Ich
> frage mich, wieso diese Datei nicht da ist.

Vermutlich hast du die in den Linkeroptionen eingetragen? Hier:

> So, unter Project->Configuration Options->Libraries kann man per
> Mausklick *.a-Dateien hinzufügen.

von holger (Gast)


Lesenswert?

Kopiere die libefsl.a einfach mal nach:

WinAVR/avr/lib

von David V. (vergossen)


Lesenswert?

Ja unter Linkeroptionen habe ich lediglich zusätzlich: libefsl.a 
eingtragen. Danach hatte ich 9 Fehlermeldungen weniger. Aber ich habe 
keine ahnung, wo ich   lefsl finden kann...

von holger (Gast)


Lesenswert?

lefsl kommt vom makefile. Dort wird eine LIB ohne "lib"
und ohne ".a" eingetragen. Also -lefsl.

von David V. (vergossen)


Lesenswert?

Hey Holger !
Das hat geklappt !
Keine Fehlermeldungen mehr. Sche hier:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Build started 15.7.2007 at 19:30:31
avr-gcc.exe -mmcu=atmega128  SD-Karte.o    -lefsl  -o SD-Karte.elf
avr-objcopy -O ihex -R .eeprom  SD-Karte.elf SD-Karte.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex SD-Karte.elf 
SD-Karte.eep || exit 0
c:\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be 
copied!

AVR Memory Usage
----------------
Device: atmega128

Program:   23106 bytes (17.6% Full)
(.text + .data + .bootloader)

Data:         50 bytes (1.2% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Menschenskinder, woher wisst ihr sowas? Lernt man so ein tiefes 
Verständnis durch Erfahrung? Ich mache das hier nämlich seit 1,5 Wochen. 
Bin also Beginner.

Viele Grüße,
David

von David V. (vergossen)


Lesenswert?

DANKE !!!

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

holger wrote:
> Kopiere die libefsl.a einfach mal nach:
>
> WinAVR/avr/lib

Yo... das war's!!!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sinnvoller: füge eine -L Option beim Linken hinzu, die den Standort
der Anwenderbibliothek(en) angibt.

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Jörg Wunsch wrote:
> Sinnvoller: füge eine -L Option beim Linken hinzu, die den Standort
> der Anwenderbibliothek(en) angibt.

Richtig. Hier nachgeguckt unter der Option "-L":
http://www.nongnu.org/avr-libc/user-manual/using_tools.html


* -Lpath
Additional location to look for archive libraries requested by -l 
options.

Daraus folgt für meine Projekt das ich in AVR Studio folgendes tun muss:

Projekt -> Customization Options -> Custom Options -> [Linker Options]
und jetzt in dem "Add" - Feld folgendes Eingeben:
-L"C:\proj\Projekt 070525 - AVR-Savvy\src\efsl-0.2.8\test"
und auf Add drücken.

Fertig!

von Frank L. (florenzen)


Lesenswert?

Hendrik H. wrote:

> * -Lpath
> Additional location to look for archive libraries requested by -l
> options.
>
> Daraus folgt für meine Projekt das ich in AVR Studio folgendes tun muss:
>
> Projekt -> Customization Options -> Custom Options -> [Linker Options]
> und jetzt in dem "Add" - Feld folgendes Eingeben:
> -L"C:\proj\Projekt 070525 - AVR-Savvy\src\efsl-0.2.8\test"
> und auf Add drücken.

-L. wäre auch einen Versuch wert. So für die Schreibfaulen ;-).

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Frank Lorenzen wrote:
> Hendrik H. wrote:
>
>> * -Lpath
>> Additional location to look for archive libraries requested by -l
>> options.
>>
>> Daraus folgt für meine Projekt das ich in AVR Studio folgendes tun muss:
>>
>> Projekt -> Customization Options -> Custom Options -> [Linker Options]
>> und jetzt in dem "Add" - Feld folgendes Eingeben:
>> -L"C:\proj\Projekt 070525 - AVR-Savvy\src\efsl-0.2.8\test"
>> und auf Add drücken.
>
> -L. wäre auch einen Versuch wert. So für die Schreibfaulen ;-).

Richtig... oder z.B.
-L../

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.