テスト.c:
#include <stdio.h>
int main(){
return printf("helloworld %d",a);
}
ライブラリ.c:
int a=0;
test.c
a
の変数を使用しますlib.c
。共有図書館にしましたlib.so
。
gcc testbench.c -o test -l lib.so
エラー発生:
‘a’ undeclared (first use in this function)
で宣言されたので、予期しない結果ですlib.c
。
答え1
a
ソースファイルと通信するには、外部に存在するコンパイラが必要です。これを行うには、次のように宣言してくださいextern
。
#include <stdio.h>
extern int a;
int main(void)
{
printf("helloworld %d", a);
return 0;
}
答え2
これは以下に関連しています。動的、静的リンクでも同じ問題が発生します。
問題はまだ宣言していないことです。しかし、あなたはそれを定義しました。extern int a;
使用する前にを使用して宣言する必要があります。
lib.h
(コンパイル単位と同じ名前で)名前のファイルでこれを行い、それを含めてlib.c
(確認するために)使用するにはmain.c
含める必要があります。
メインプログラム
#include "lib.h"
#include <stdio.h>
int main(){
printf("helloworld %d",a);
return 0;
}
ライブラリファイル
extern int a;
ライブラリファイル
#include "lib.h"
/*other includes that we need, after including own .h*/
/*so we can catch missing dependencies*/
int a=0;