如何在c编程中使用“extern struct”共享变量并用gcc编译?

Lam*_*daG 5 c

我希望一些共享变量应该在源文件main.csecondary.c之间访问,我的头文件是all.h定义了共享数据类型,

#ifndef ALL_H
#define ALL_H
struct foo {
    double v;
    int i;
};

struct bar {
    double x;
    double y;
};
#endif
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

下面给出了secondary.h

#include <stdio.h>
#include "all.h"

int sec();
Run Code Online (Sandbox Code Playgroud)

下面给出了第二个.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;
}
Run Code Online (Sandbox Code Playgroud)

我以为我拥有所有声明并包含标题。但是当我编译时

    gcc -o main main.c second.c 

or 

    gcc -c second.c
    gcc -c main.c
    gcc -o main main.o second.o
Run Code Online (Sandbox Code Playgroud)

它会给出一些错误,例如

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
Run Code Online (Sandbox Code Playgroud)

我认为某个地方的使用extern是错误的或者我使用gcc不正确?