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