メインプログラム

メインプログラム

テスト.c:

#include <stdio.h>
int main(){
    return printf("helloworld %d",a);
}

ライブラリ.c:

int a=0;

test.caの変数を使用します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;

関連情報