В руководстве пользователя AVR-Libc есть целая глава о том, как создать библиотеку . Я бы предложил начать там. Если вы используете IDE, такую как eclipse, будут настройки проекта, которые будут применимы, если вы хотите создать библиотеку вместо исполняемого файла.
редактировать
Вот что делает eclipse, когда я настраиваю его для вашего примера:
Чтобы его нельзя было легко скомпилировать, я изменил вашу функцию test_function на:
#include "test.h"
void test_function()
{
volatile int i = 0;
i++;
}
Сборка библиотеки:
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
Построение основной программы
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
... и он строит без ошибок. Я думаю, вам нужно включить пути, указанные в командной строке. Соблюдение правил именования также очень важно, попробуйте следовать приведенному выше шаблону. Очевидно, что команды avr-objdump и avr-size просто для дополнительной информации и не требуются, если вы только строите.
Я почти уверен, что если вам нужно будет перекомпилировать вашу библиотеку для конкретных целевых архитектур и тактовых частот.
test_function
вtest.c
, не так ли? Не просто объявил это?