GCC을 이용한 정적 라이브러리(Static Library)을 만드는 방법을 사용한다.
정적 라이브러리는 과거 개발자의 편의성을 위해서 작성되었다.
먼저, 소스를 한 소스에 몰아서 정리하는 것에서 개발자는 차후에 유지 보수하기가 어려워진다는 문제점을 가지고 있게 되었다.
그래서 필요한 기능만 가지고 있는 장치만 만들고, 이 장치를 호출하는 형태로 관리하는 것이다.
다시 그 기능을 수정할려면, 그 부분을 수정한 후에 컴파일을 하면 되는 것이다.
정적 라이브러리가 사용되는 위치는 링크 작업에서 하기 때문에, 소스를 받아서 컴파일하는 것 보다는 상대적으로 처리속도가 빨라진다.
정적 라이브러리(Static Library)의 단점은 해당 라이브러리의 기능이 약간이라도 변경이 되면, 다시 작업을 해야되는 단점을 가진다.
이러한 문제는 차후에 개발자의 유지/보수에서 큰 문제를 가지게 되었다.
하나의 기능을 고치기 위해선 모든 소스를 컴파일 해야되는 문제점을 가지게 되었고, 이것은 곧 하나의 문제를 위해서 프로그램을 모두 다시 제작하는 과정이 있어야된다는 점이다. 1 2
정적 라이브러리를 작성할 예제이다.
math.h
1 2 | int sum(int, int); int diff(int, int); | cs |
math.c
1 2 3 4 5 6 7 8 9 10 11 | #include "math.h" int sum(int a, int b) { return a + b; } int diff(int a, int b) { return a - b; } | cs |
이렇게 한 후에 math.a(*.lib)을 작성하는 방법은 다음과 같다.
1 2 | gcc -c math.c -o math.o ar rc libmath.a math.o | cs |
이렇게 하면 libmath.lib이라는 정적 라이브러리 파일이 완성되게 된다.
libmath.lib을 이용한다.
사용하기 위한 예제.
main.c
1 2 3 4 5 6 7 8 9 10 11 12 | #include "math.h" int main() { int a = 10; int b = 40; printf("sum : %d\n",sum(a,b)); printf("diff : %d\n",diff(a,b)); return 0; } | cs |
이렇게해서 사용을 할 수 있다.
참고로 math.h에 있는 sum과 diff가 위에는 정의가 되어있지 않기 때문에 원래는 사용을 할 수 없을 것이다.(math.c가 없다고 가정한다.)
하지만, libmath.a라는 파일이 있다면, 다음과 같은 방법으로 사용할 수 있게 된다.
1 | gcc .\main.c -L./ -lmath | cs |
이렇게 하면, 정적 라이브러리를 사용해서 프로그램을 만들 수 있게 된다.'
여기서 -L은 참조할 Library의 위치를 지정하는 것이고, -l은 lib과 .a을 제외한 라이브러리의 명칭을 뜻한다.
만약 .lib이라면(libmath.lib), -llibmath 라는 형식을 취해야된다.
정적 라이브러리를 이용해서 작성한 기능을 불러와서 사용하는 형태를 취하면 분할 컴파일을 할때 조금 더 효율적으로 작성을 할 수 있게 된다.
'연습' 카테고리의 다른 글
Windows API 프로그래밍 -0. 초기 윈도우 작성 - (0) | 2016.06.16 |
---|---|
GCC로 Dynamic Library 만들기. (0) | 2016.06.15 |
Windows MouseEvent 처리 (0) | 2016.06.13 |
Windows Local Host IPv4 주소 찾기. (0) | 2016.06.12 |
마우스 커서 위치 조절하기. (0) | 2016.06.11 |