El manual de usuario de AVR-Libc tiene un capítulo completo sobre cómo construir una biblioteca . Sugeriría comenzar allí. Si usa un IDE como eclipse, habrá configuraciones de proyecto que serán aplicables si desea construir como una biblioteca en lugar de un ejecutable.
Editar
Esto es lo que hace eclipse cuando lo configuro para su ejemplo:
Para que no se pueda compilar trivialmente, cambié su test_function a:
#include "test.h"
void test_function()
{
volatile int i = 0;
i++;
}
Construyendo 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
Construyendo el programa principal
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
... y se construye sin error. Supongo que necesita incluir rutas especificadas en las líneas de comando. Seguir las convenciones de nomenclatura adecuadas también es bastante importante, intente y siga el patrón anterior. Obviamente, los comandos avr-objdump y avr-size son solo para obtener más información y no son necesarios si solo está compilando.
Estoy bastante seguro de que si necesita recompilar su biblioteca para arquitecturas de destino específicas y velocidades de reloj también.