아래와 같이 같은 이름의 전역변수를 공유하는 소스와 라이브러리가 있다.
main.c
#include <stdio.h>
int gVal;
int main(void)
{
gVal = 0;
SetgVal();
printf("gVal : %d \n", gVal);
return 0;
}
lib_main.c
#include <stdio.h>
int gVal;
int Func1(void)
{
// Function
}
lib_func.c
#include <stdio.h>
extern int gVal;
int SetgVal()
{
gVal = 100;
return 1;
}
처음은 위 라이브러리를 정적라이브러리로 만들었다.
그러자, 소스에 링크를 시키니 "gVal" 이라는 전역변수가 겹쳐 컴파일이 되지 않는다.
그렇다고 lib_main.c 의 gVal을 extern 으로 선언할 경우 이번엔 라이브러리 자체를 컴파일 할 수 없게 된다.
실제가 없는 변수를 extern 하고 있기 때문이다.
위 문제는 라이브러리를 동적으로 컴파일 하면 해결된다.
동적 라이브러리는 프로세스 동작 중 해당 함수를 호출할 경우에만 코드를 호출하기 때문에, 소스 컴파일시에도 중복선언으로 걸릴 일이 없기 때문이다.
'노트' 카테고리의 다른 글
fork와 SIGINT (0) | 2022.07.08 |
---|