主程序

主程序

测试.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;

相关内容