AVR-Libcユーザーマニュアルは、ライブラリを構築する方法についての章全体を持っています。そこから始めることをお勧めします。EclipseなどのIDEを使用する場合、実行可能ファイルではなくライブラリとしてビルドする場合に適用できるプロジェクト設定があります。
編集する
あなたの例のために私がそれを設定したとき、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コマンドは詳細情報を提供するだけであり、ビルドするだけの場合は必要ありません。
特定のターゲットアーキテクチャとクロック速度に合わせてライブラリを再コンパイルする必要がある場合は、かなり確実です。