C++ TIPS

Static Link Library 직접 만들고 링크해보기

hyrule 2022. 10. 28. 02:58

이글에선 초보도 일단 해볼수 있도록 간단한 사용 방법만 설명.

원리는 구글링하면 설명 잘해주는글 수두룩하므로 그걸 볼것.

 

—이론—

  • 정적 링크 라이브러리는 컴파일 시 코드가 연결된 프로그램에 합쳐진다.
    • 소스코드 + (라이브러리 헤더 파일) + 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 파일이 있다.

 

 

 

 

이걸 따로 폴더 만들어서 거기에 옮긴 뒤 실행시켜보자.

 

 

 

-> 따로 떼 놔도 아주 잘 작동하는것을 볼수 있다.

Static_Link_Library.zip
0.02MB