Static Link Library 직접 만들고 링크해보기
이글에선 초보도 일단 해볼수 있도록 간단한 사용 방법만 설명.
원리는 구글링하면 설명 잘해주는글 수두룩하므로 그걸 볼것.
—이론—
- 정적 링크 라이브러리는 컴파일 시 코드가 연결된 프로그램에 합쳐진다.
- 소스코드 + (라이브러리 헤더 파일) + lib → exe
- 동적 링크 라이브러리는 컴파일 시 연결된 프로그램에 합쳐지지 않는다.→ dll과 연결된 함수 주소만 프로그램에 합쳐놓고, 자세한 내용은 dll에서 참조해서 사용하는 방식
- 쉽게 생각해서 주소록만 등록시켜놓고 사용하는 방식이라고 보면 될것 같다.
- 소스코드 + (라이브러리 헤더 파일) + lib → exe + dll
—실전—
1. 라이브러리용 프로젝트 만들기
1. 빈 프로젝트 하나 생성
2. 이렇게 헤더와 소스파일을 각각 하나씩 만들어준다.
3. 헤더 파일에 원하는 함수를 선언해준다. 간단하게 곱하기, 더하기 함수 2개만 선언할 것이다.
int LIBAdd(int a, int b);
int LIBMul(int a, int b);
4. library.cpp로 이동해서 헤더파일을 포함시킨다.
#include "library.h"
5. 위에서 만든 함수 2개를 정의한다.
int Add(int a, int b)
{
return a + b;
}
int Mul(int a, int b)
{
return a * b;
}
6. 이제 빌드해서 라이브러리 파일을 만들어주면 된다.
2. 정적 라이브러리 빌드하기
1. 프로젝트 - 속성에 들어간다.
2. 4개만 설정해주면 된다.
모든 구성으로 설정
출력 디렉터리의 끝에 Lib\ 붙여줌
중간 디렉터리의 끝에 Obj\ 붙여줌
구성 형식을 정적라이브러리(.lib)로 바꿔줌 ← 이게 핵심
💡 1~3번은 뭔 설정인지 알면 알아서 적절히 해주면 됩니다
설정 다했으면 빠져나와 주고
3. Debug, Release 상관없이 x64로 바꿔주고 (마찬가지로 뭔 설정인지 알면 알아서 할것)
4. Ctrl + B 눌러서 빌드해 준다.
5. 그럼 프로젝트 폴더에 x64라는 폴더가 생성된다. Debug/Lib 폴더 안으로 들어가 보면 라이브러리가 만들어져 있다.
6. 바탕화면 같은데에다 폴더 하나 만들고 .lib와 .pdb 2개 파일만 복사해서 가져온다.
7. 그리고 프로젝트 폴더에서 library.h (아까 2-1에서 만들었던 거) 를 가져온다.
8. 라이브러리는 준비 끝
3. 정적 라이브러리 연결용 프로젝트 만들기
1. 라이브러리 테스트용 프로젝트를 하나 생성한다.
2. "Hello World" 를 출력하는 프로그램까지만 만들어준다.
3. 이 프로젝트 폴더에 2번에서 복사해놓은 파일 3개를 붙여넣어준다.
4. 됐으면 편집 창으로 돌아와서 소스파일 우클릭 - 추가 - 기존항목 선택 후 복사한 파일중 library.h 파일을 추가해준다.
5. 그리고 main.cpp에 다음 코드를 추가한다.
#pragma comment(lib, "Library_Exercise.lib")
#include "Library.h"
- 위쪽 코드는 라이브러리 파일 위치를 알려주는 코드이고,
- 아래쪽 코드는 라이브러리 안의 함수가 뭐가 있는지를 알려주는 코드를 main.cpp에 포함시킨 것이다.
6. 그리고 아까 만들었던 함수를 main 함수 안에서 불러 보면 놀랍게도 빨간줄이 안 나오고 불러진다.
int main()
{
int a = LIBAdd(2, 3);
int b = LIBMul(2, 3);
printf("2 + 3 = %d\n", a);
printf("2 * 3 = %d\n", b);
system("pause");
return 0;
}
7. 그럼 이제 F5를 눌러서 실행시켜보자.
4. 특징
정적 라이브러리는 라이브러리 내부의 코드가 전부 프로그램에 합쳐진다.
궁금하면 직접 해보자.
프로젝트 폴더 안쪽에 들어가보면 .exe 파일이 있다.
이걸 따로 폴더 만들어서 거기에 옮긴 뒤 실행시켜보자.
-> 따로 떼 놔도 아주 잘 작동하는것을 볼수 있다.