mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie erstelle ich eine lib*.a Datei?


Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte die Libary lib_AT91SAM7S256.h in mein Projekt einfügen und 
bekommen folgene Fehlermeldung von GNU:

make -k all
.compiling
arm-elf-gcc -I./ -c -fno-common -O0 -g lib_AT91SAM7S256.h
lib_AT91SAM7S256.h:55: error: expected ')' before 'pAic'
lib_AT91SAM7S256.h:84: error: expected ')' before 'pAic'
lib_AT91SAM7S256.h:96: error: expected ')' before 'pAic'
.
.
.
.

das geht eine ganze Weile so weiter!

meine Makefile sieht im übrigen so aus:

NAME = test

# variables
CC      = arm-elf-gcc
LD      = arm-elf-ld -v
AR      = arm-elf-ar
AS      = arm-elf-as
CP      = arm-elf-objcopy
OD  = arm-elf-objdump

CFLAGS  = -I./ -c -fno-common -O0 -g
AFLAGS  = -ahls -mapcs-32 -o crt.o
LFLAGS  =  -Map main.map -Ttest123.cmd
CPFLAGS = --output-target=binary
ODFLAGS  = -x --syms

OBJECTS = crt.o  main.o button2isr.o isrsupport.o lowlevelinit.o 
lib_AT91SAM7S256.o ioat91sam7s256.o


# make target called by Eclipse (Project -> Clean ...)
clean:
  -rm $(OBJECTS) crt.lst main.lst main.out main.bin main.hex main.map 
main.dmp


#make target called by Eclipse  (Project -> Build Project)
all:  main.out
  @ echo "...copying"
  $(CP) $(CPFLAGS) main.out main.bin
  $(OD) $(ODFLAGS) main.out > main.dmp

main.out: $(OBJECTS) test123.cmd
  @ echo "..linking"
  $(LD) $(LFLAGS) -o main.out $(OBJECTS) libc.a libm.a libgcc.a

crt.o: crt.s
  @ echo ".assembling"
  $(AS) $(AFLAGS) crt.s > crt.lst

main.o: main.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) main.c

button2isr.o: button2isr.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) button2isr.c

isrsupport.o: isrsupport.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) isrsupport.c

lowlevelinit.o: lowlevelinit.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) lowlevelinit.c

lib_AT91SAM7S256.o: lib_AT91SAM7S256.h
  @ echo ".compiling"
  $(CC) $(CFLAGS) lib_AT91SAM7S256.h

ioat91sam7s256.o: ioat91sam7s256.h
  @ echo ".compiling"
  $(CC) $(CFLAGS) ioat91sam7s256.h




------------------------------------------------------------------------ 
-
# specify output filename here (must be *.bin file)
TARGET = main.bin

# specify the directory where openocd executable and configuration files 
reside
OPENOCD_DIR = 'c:/Programme/openocd-2007re141/bin/'

# specify OpenOCD executable (pp is for the wiggler, ftd2xx is for the 
USB debuggers)
#OPENOCD = $(OPENOCD_DIR)openocd-pp.exe
OPENOCD = $(OPENOCD_DIR)openocd-ftd2xx.exe

# specify OpenOCD configuration file (pick the one for your device)
#OPENOCD_CFG = $(OPENOCD_DIR)at91sam7s256-wiggler-flash-program.cfg
#OPENOCD_CFG = $(OPENOCD_DIR)at91sam7s256-jtagkey-flash-program.cfg
OPENOCD_CFG = $(OPENOCD_DIR)at91sam7s256-armusbocd-flash-program.cfg

# program the AT91SAM7S256 internal flash memory
program: $(TARGET)
  @echo "Flash Programming with OpenOCD..."      # display a message on 
the console
  $(OPENOCD) -f $(OPENOCD_CFG)            # program the onchip FLASH 
here
  @echo "Flash Programming Finished."          # display a message on 
the console



Die Datei ioat91sam7s256.h benötigt die lib_AT91SAM7S256.h selbst!

Bei dem Versuch es händisch mit GNu zu machen....kommt das gleiche raus!
Die lib*.h muß doch erst eine lib*.a Datei werden und dann kann es eine 
lib*.o Datei werden, richtig?

Nur wie wird es eine lib*.a Datei

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine .h -Datei ist eine Header Datei der Sprache "C" Darin stehen Daten- 
und Prototypen von andernorts definierten Funktionen. Eine .h Datei wird 
normalerweise nicht eigenständig in eine object-Datei (.o) kompiliert, 
erst recht nicht in eine Liste von object-Dateien, was eine library (.a) 
darstellt.

Wenn man eine Library  verwenden will, verwendet man die 
entsprechende(n)Header-Datei(en) per #include - Anweisung im eigenen 
Quelltext und bindet die Bibliothek per Linker-Anweisung mit dem eigenen 
Programm zusammen, indem  ( beim GNU -ld)  außer den Namen der selbst 
erzeugten Objekt-Dateien der Name der Bibliothek mittels "-l" auf dessen 
Befehlzeile angegeben wird (ld --help erklärt den Rest. Aus 
irgendwelchen Gründen bewirkt die Angabe "ld -ldns" die Einbindung der 
Bibliothek libdns, die angabe des Präfix "lib" spart man sich also.)

Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

durch deinen Tip habe ich versucht ersteinmal eine .o Datei zu bekommen, 
denn nur die versteht der gnu -ld.

Wenn ich nun mit meiner Datei arm-elf-gcc (arm-elf-gcc 
lib_AT91SAM7S256.h) versuche daraus eine .o Datei zu erstellen, bekomme 
ich nur zu lesen das ganz viel Funktionen nicht deklariert sind!
versuche ich das Ganze mit dem Zusatz -S (arm-elf-gcc -S 
lib_AT91SAM7S256.h)
dann sagt er mir das die "output filename are specified twice"

Die Aussage verstehe ich aber nicht, hast du einen Tip?

Gruß

Tobi

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zumindest die lib_AT91SAM7S256.h, die ich kenne, ist keine Library im 
Sinne von einer Sammlung von Objectcode und auch nicht dazu gedacht, 
eine solche daraus zu machen. Die darin enthaltenen Funktionen sind zu 
Verwendung als Inline-Funktionen gedacht. Damit es bei gcc wie 
beabsichtigt funktioniert:
#define __inline static inline
#include "lib_AT91..."

Martin Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.