ソース ファイルmain.cとsecond.cの間でいくつかの共有変数にアクセスする必要があり、私のヘッダー ファイルは共有データ型を定義するall.hです。
#ifndef ALL_H
#define ALL_H
struct foo {
double v;
int i;
};
struct bar {
double x;
double y;
};
#endif
main.cを以下に示します
/* TEST*/
#include "all.h"
#include "second.h"
int main(int argc, char* argv[])
{
struct foo fo; // should be accessed in second.c
fo.v= 1.1;
fo.i = 12;
struct bar ba; // should be accessed in second.c
ba.x= 2.1;
ba.y= 2.2;
sec(); // function defined in second.c
return 0;
}
second.hを以下に示します
#include <stdio.h>
#include "all.h"
int sec();
second.cを以下に示します
#include "second.h"
extern struct foo fo;
extern struct bar ba;
int sec()
{
printf("OK is %f\n", fo.v+ba.x);
return 0;
}
すべての宣言があり、ヘッダーが含まれていると思いました。しかし、私がコンパイルするとき
gcc -o main main.c second.c
or
gcc -c second.c
gcc -c main.c
gcc -o main main.o second.o
次のようなエラーが発生します
second.o: In function `sec':
second.c:(.text+0x8): undefined reference to `fo'
second.c:(.text+0xe): undefined reference to `ba'
collect2: ld returned 1 exit status
extern
の使用のどこかが間違っていたと思いますか、それとも間違って使用しgcc
ていますか?