메인 프로그램

메인 프로그램

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

관련 정보