Wie erstelle ich eine lib*.a Datei?

OP #642230
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
Gast #642249
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.)
OP #642708
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
Gast #643234
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:
1
#define __inline static inline
2
#include "lib_AT91..."

Martin Thomas

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.