Il manuale dell'utente di AVR-Libc contiene un intero capitolo su come costruire una libreria . Suggerirei di iniziare da lì. Se usi un IDE come eclipse, ci saranno impostazioni di progetto applicabili se vuoi costruire come libreria anziché come eseguibile.
modificare
Ecco cosa fa eclipse quando lo configuro per il tuo esempio:
In modo che non potesse essere banalmente compilato, ho modificato la funzione test in:
#include "test.h"
void test_function()
{
volatile int i = 0;
i++;
}
Costruire la biblioteca:
avr-gcc -Wall -g2 -gstabs -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF"test.d" -MT"test.d" -c -o"test.o" "../test.c"
avr-ar -r "libtest.a" ./test.o
avr-objdump -h -S libtest.a >"libtest.lss"
avr-size --format=avr --mcu=atmega328p libtest.a
Costruire il programma principale
avr-gcc -I"C:\path\to\my\workspace\test" -Wall -g2 -gstabs -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF"program.d" -MT"program.d" -c -o"program.o" "../program.c"
avr-gcc -Wl,-Map,MainProgram.map -L"C:\path\to\my\workspace\test\Release" -mmcu=atmega328p -o"MainProgram.elf" ./program.o -ltest
avr-objdump -h -S MainProgram.elf >"MainProgram.lss"
avr-size --format=avr --mcu=atmega328p MainProgram.elf
... e si costruisce senza errori. Suppongo sia necessario includere i percorsi specificati nelle righe di comando. Anche seguire le convenzioni di denominazione appropriate è abbastanza importante, prova a seguire il modello sopra. Ovviamente i comandi avr-objdump e avr-size sono solo per ulteriori informazioni e non sono richiesti se stai solo costruendo.
Sono abbastanza sicuro che se dovrai ricompilare la tua libreria per specifiche architetture di destinazione e velocità di clock.