RTOS/OS を使用しない小規模な組み込みシステムは、動的/共有ライブラリを使用しますか。私の理解では、それを使用するのは非常に難しく、生産的ではありません。
静的ライブラリに存在する API を複数回呼び出す場合。API コードはマクロ展開のようにすべての呼び出し場所に配置されますか、またはコード/テキストはすべての呼び出しで共通になりますか。コード/テキストが一般的になると思います。
複数のAPIを持つ.cファイルの静的ライブラリを作成し、それをメインファイルと静的にリンクし、メインファイルで1つのAPIのみが呼び出された場合、私の質問はライブラリ全体が最終的な.binに含まれているか、またはのみ含まれているかです特定の API コード。
上記の質問から、私は基礎自体が欠けていると推測できるので、誰でもこれらをブラッシュアップするための関連リンクを提供してください。
よろしく
[編集]
私は次のことを試しました
add.c モジュール
`int addition(int a,int b)`
`{`
`int result;`
`result = a + b;`
`return result;`
`}`
`size addition.o`
23 0 0 23 17 addition.o
multiplication.c モジュール
`int multiplication(int a, int b)`
`{`
`int result;`
`result = a * b;`
`return result;`
`}`
`size multiplication.o`
21 0 0 21 15 multiplication.o
両方のオブジェクトファイルを作成し、アーカイブに入れます
ar cr libarith.a addition.o multiplication.o
次に、メイン アプリケーションの
example.c モジュール に静的にリンクします
`#include "header.h"`
`#include <stdio.h>`
`1:int main()`
`2:{`
`3:int result;`
`4:result = addition(1,2);`
`5:printf("addition result is : %d\n",result);`
`6:result = multiplication(3,2);`
`7:printf("multiplication result is : %d\n",result);`
`8:return 0;`
`9:}`
gcc -static example.c -L. -larith -o example
size of example
511141 1928 7052 520121 7efb9 example
example.c の 6 行目をコメントし
、再度
gcc -static example.c -L をリンクしました。-larith -o example 例
のサイズ
511109 1928 7052 520089 7ef99 example
上記の 2 つの 32 バイトの差
は追加を意味します。o は例に含まれていません
以下のように、addimulation.c と multiplication.c の両方のモジュールを addmult.c としてマージしました。
int addition(int a,int b)
{
int result;
result = a + b;
return result;
}
int multiplication(int a, int b)
{
int result;
result = a * b;
return result;
}
オブジェクトファイルを作成し、
以前のアーカイブを削除したことを行う前にアーカイブに入れました
ar cr libarith.a addmult.oは、example.c
gcc -static example.c -L
の行番号 6 をコメント化しました。
-larith -o 例
size example
511093 1928 7052 520073 7ef89 example
uncommented line number of example.c
size example 511141 1928 7052 520121 7efb9 example
私の質問は、両方の関数が呼び出された場合、最終的なテキストサイズは同じですが、1つの関数のみが呼び出された場合、16の違いがありますが、乗算.oサイズは23であるため、間違いなく含まれていませんが、16を正当化する方法.基本的なもの自体が欠けている場合は?