次のような共有および静的ライブラリに関する関連チュートリアルを読みました。
「gnu コンパイラ [gcc] で共有および静的ライブラリを作成する」
「静的、共有、動的、およびロード可能な Linux ライブラリ」
ただし、残念ながら、彼らが使用したすべての例は、1 つの関数と .c ファイルです。
2 つの質問があります。
(1) example1.c のように、さらに 2 つの関数を含む 1 つのファイルがある場合
void ctest11(int *i)
{ *i = 5; }
void ctest12(int *i)
{ *i = 5; }
exmaple1.c を libexample1.so にコンパイルした後、その中で ctest11 と ctest12 を呼び出すことができますか?
(2) さらに 2 つの関数を含む 1 つのファイルがある場合、そのうちの 1 つは example2.c などのメイン関数です。
void ctest21(int *i)
{ *i = 5; }
void main(int *i)
{ *i = 5; }
exmaple2.c を libexample2.so にコンパイルした後、1 つの .c ファイルを ctest21 関数だけでコンパイルするのと同じですか?
(3) example3.c と exmaple4.c という 1 つのファイルがある場合、example3.c の関数は example4.c の関数を使用します。例: example3.c
void ctest31(int *i)
{ *i = ctest41(2,3); }
example4.c
int ctest41(int a, int b)
{ return a+b; }
example2.c と example3.c を libexample23.so にコンパイルするとき、ctest31 と ctest41 の両方を呼び出すことができますか?
しかし、gcc example2.c example3.o を libexample2.so にすると、ctest31 しか呼び出せないのではないでしょうか?