테스트.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;