SlideShare a Scribd company logo
1 of 39
Cover
PPT 템플릿 출처: http://www.free-powerpoint-templates-design.com
정적 라이브러리와 동적 라이브러리
Feat. Shared Project
데브루키 쿵쾅(김광일)
Cover
목차
Cover
동적 라이브러리02
Shared Project03
정적 라이브러리01
비교04
라이브러리
라이브러리는 함수 또는 클래스 등 기능의 집합이다.
C에서 사용했던 stdlib 또한 c언어에서 사용하는 다양한 기능들의 집합인 라이브러리
이다.
직접 외부 라이브러리를 개발하게 되면 기능별로 프로젝트를 분리하여 개발할 수 있
다.
많은 기능들이 라이브러리로 제공한다.
(DirectX, OpenGL 등 그래픽스 라이브러리, FMOD와 같은 사운드, PhysX 같은 물리 엔진 등)
ALLPPT Layout Clean Text Slide for your Presentation
정적 라이브러리 (Static Library)
정적 라이브러리(Static Library)는 프로그램을 작성하고 컴파일하여 링크 단계에서 라
이브러리(.lib 파일)를 실행 파일에 복사하여 포함시키는 것이다.
이때 실행 파일의 크기가 커지는 단점이 있지만 별도의 추가 작업 없이 라이브러리의
기능을 사용할 수 있는 점과 실행 파일에 포함되어 있기 때문에 라이브러리가 올바른
버전이라는 확신을 가질 수 있는 장점이 있다.
ALLPPT Layout Clean Text Slide for your Presentation
정적 라이브러리 만들기
프로젝트를 생성한다.
그리고 솔루션에 새 프로젝트를 추가한다.
정적 라이브러리 만들기
Windows 데스크톱 항목에서 정적 라이브러리를 선
택하고 생성한다.
정적 라이브러리 만들기
정적 라이브러리 프로젝트에 코드를 추가한다
간단하게 a와 b를 더하는 함수를 작성하였다.
정적 라이브러리 만들기
빌드를 하면 방금 만든 기능의 .lib 파일이 나온다.
정적 라이브러리 만들기
빌드를 하면 방금 작성한 코드가 담긴
.lib 파일이 나온다.
정적 라이브러리 사용하기
이제 정적 라이브러리를 프로젝트에 포함시켜본다.
프로젝트 속성에 C/C++ - 일반에 추가 포함 디렉터리
정적 라이브러리의 헤더 파일이 있는 경로를 추가해준다.
라이브러리를 사용할 때에는 헤더 파일이 필요하다. (선언부)
.lib 파일만 있으면 어떤 기능이 들어있는지는 알 수 없다.
그래서 헤더 파일에서 기능을 호출할 때 lib을 사용한다.
그래서 추가 포함 디렉터리에 포함시키거나 헤더 파일만 옮겨
오는 방법 등을 사용하면된다.
정적 라이브러리 사용하기
이제 .lib 파일을 포함시켜준다.
먼저 프로젝트에 .lib 경로를 포함하도록 하기 위해
링커 - 일반에서 추가 라이브러리 디렉터리에 .lib 파일이 있는
경로를 추가한다.
정적 라이브러리 사용하기
.lib 파일을 프로젝트에 포함하는 방법을 3가지 정도 소개한다.
먼저 코드상에서 포함하는 방법이다.
#pragma comment(lib, “.lib파일명”)
위와 같이 작성하면 정적 라이브러리 파일을 빌드 중에
링커 단계에서 실행 파일에 포함시킬 것이다.
정적 라이브러리 사용하기
두번째 방법으로는 링커 - 입력에서
추가 종속성에 .lib 파일을 포함시킨다.
정적 라이브러리 사용하기
마지막 방법으로는 프로젝트의 참조에 참조 추가를 하는 방법이다.
해당 방법을 이용하면 추가 포함 디렉터리, 추가 포함 라이브러리 등
추가하지 않고 라이브러리가 포함된다.
한 솔루션 내에서 작업한다면 가장 편한 방법이다.
동적 라이브러리 (Dynamic Link Library)
동적 라이브러리(Dynamic Link Library)는 이름 그대로 프로그램 실행 파일에 연결
되지 않고 동적으로 프로그램이 실행될 때 연결하거나 런타임 중에 연결하여 사용할
수 있는 라이브러리이다.
정적 라이브러리와 달리 실행 파일에 포함되지 않기 때문에 실행 파일의 크기가 커지
지 않고 완전 별도의 기능의 묶음처럼 사용하여 다른 프로그램에도 사용할 수 있게 배
포도 할 수 있다.
단, 사용하는 방법은 정적 라이브러리보다 조금 복잡하다.
간단하게 DLL 예제를 만들면서 알아본다.
ALLPPT Layout Clean Text Slide for your Presentation
동적 라이브러리 만들기
정적 라이브러리와 마찬가지로 솔루션에
새 프로젝트로 DLL을 추가해준다.
동적 라이브러리 만들기
소스 코드를 추가해준다.
네모칸 외에는 기본적으로 생성된 코드들이다.
동적 라이브러리 만들기
작성한 코드의 헤더 파일에 매크로를 작성 한 것을 볼 수 있다.
DLL에서 .dll과 .lib 파일을 만들 때에는 __declspec(dllexport)를
외부에서 사용할 함수 또는 클래스명 앞에 붙여야 하고
외부에서 사용할 때에는 __declspec(dllimport)를 붙여야 사용된다.
결론적으로 DLL 프로젝트 내부에서만 동작하는 기능이 있을 것이고
외부에서 사용할 기능이 있을 때 붙여주는데 옆의 코드와 같이 매크로로
작성하고 DLL 프로젝트에는 기본적으로 DLL_EXPORTS와 같은 매크로
를 #define 하도록 하여 사용한다.
동적 라이브러리 만들기
매크로는 코드에 넣어도 되지만
프로젝트 속성 페이지에서 전처리기에 추가하는 방법도 있다.
동적 라이브러리 만들기
DLL 프로젝트를 빌드하면 다음과 같이 파일들이 나온다.
정적 라이브러리와 다르게 .dll 파일이 추가로 나오는데
두 가지 방법으로 프로젝트에 포함할 수 있다.
동적 라이브러리 사용하기
그 방법 중 첫 번째로 암시적 링킹이 있다.
암시적 링킹은 정적 라이브러리와 동일하게 .lib 파일을
#pragma comment, 프로젝트 속성, 참조 추가 등으로
프로젝트에 포함시킨다.
암시적 링킹(Implicit Linking)
동적 라이브러리 사용하기
.dll 파일을 만들었는데 .lib 파일을 포함한다고 하니
이상하다고 생각될 것이다.
암시적 링킹(Implicit Linking)
동적 라이브러리 사용하기
DLL 프로젝트에서 나온 .lib 파일은 Import Library 역할을 한다.
그리고 어떤 DLL을 사용할지에 대한 정보를 가지고 있다.
파일 용량을 봐도 알 수 있을 것이다.
이와 같이 암시적 링킹은 컴파일 링크 단계에서 정적 라이브러리처럼
DLL 파일의 .lib 파일을 실행파일에 포함한다.
하지만 용량이 그리 크지 않기 때문에 실행파일 크기도 그렇게 커지지 않
는다.
암시적 링킹(Implicit Linking)
동적 라이브러리 사용하기
명시적 링킹은 프로그램이 실행중(Runtime)에 DLL을 링크하여
포함되어 있는 기능을 사용하는 방법이다.
명시적 링킹(Explicit Linking)
동적 라이브러리 사용하기
Window 함수도 사용해야하고 조금 사용법은 복잡하다.
LoadLibrary를 통해 DLL을 로드한다.
GetProcAddress 함수 콜을 통해 Add라는 DLL의 함수를 가져온다.
그리고 콜하지만 하지만 현재 코드에서 바로 동작하지 않는다.
명시적 링킹(Explicit Linking)
동적 라이브러리 사용하기
DLL 프로젝트에서 Add라는 함수를 만들고
프로그램 실행 중 윈도우 함수를 통해 가져와서
실행을 하였는데 왜 안되는 것인가?
DLL 파일 명도 맞고 함수 명도 맞다!
하지만 여기서는 C++의 특징때문에 함수명이 조금 특이해진다.
명시적 링킹(Explicit Linking)
동적 라이브러리 사용하기
DLL Function Viewer라는 것을 이용하여 DLL 파일을 열어보면
내가 작성한 Add 함수의 이름이 이상한 것을 볼 수 있다.
이와 같이 함수명을 가지게 되는 이유는 C++이 객체 지향의 특징을 갖게
되고 그 중 다형성이라는 특징때문이다.
동일한 함수명으로 다른 기능을 구현하는 오버로딩에 의해 그 함수들을 구
분짓기 위해 함수명이 저렇게 변한다고 한다.
명시적 링킹(Explicit Linking)
동적 라이브러리 사용하기
내가 작성한 함수명을 온전하게 가져오고 싶다면
Export 함수 앞이나 코드블럭을 하나 만들어서 extern “C”로 감싸준다.
그럼 C언어 규칙으로 링크를 하게되어 함수명이 내가 작성한대로 나온다.
기본적으로 cpp 코드는 extern “C++”이 암묵적으로 붙어있다고 한다.
이와 같이 수정 후 이전 코드에서 실행하면 잘 동작한다.
이렇게 런타임 중에 링크를 하는 것이 명시적 링킹이다.
명시적 링킹(Explicit Linking)
공유 프로젝트 (Shared Project)
공유 프로젝트(Shared Project)는 이름 그대로 프로젝트의 소스 코드를 공유하는 프로
젝트이다. 말 그대로 공유 받아서 사용하기 때문에 내 프로젝트와 같이 빌드 된다.
그런데 개인 프로젝트나 회사내 프로젝트라면 사실 통째로 빌드하는게 더 편할 수 있
기 때문에 공유 프로젝트 사용도 괜찮다고 생각한다.
ALLPPT Layout Clean Text Slide for your Presentation
공유 프로젝트 만들기
솔루션에 프로젝트 추가를 하여 기타에 공유 항목 프로젝트를 추가한다.
공유 프로젝트 만들기
공유 프로젝트를 추가하고 소스 코드도 추가하여 작성한다.
공유 프로젝트 만들기
내 프로젝트에 포함 시키는 방법은 참조 추가에가서
공유 프로젝트 항목에 보면 새로 추가한 것이 있을 것이다.
체크를 해준다.
공유 프로젝트 만들기
그리고 내 프로젝트에서 그냥 헤더파일 include 하고 구현한 기능을 사용
하면된다.
필요에 따라 기능의 집합을 라이브러리 형태가 아닌 오픈소스로 제공한다
면 이와 같이 공유 프로젝트를 사용하는 것도 좋을 것이다.
비교
정적 라이브러리
.lib
버전 보장 가능
실행 파일이 .lib 만큼 커짐
빌드 속도 저하
디버깅이 힘들 수 있음
동적 라이브러리
.dll
버전 보장은 알 수 없음
실행 파일이 급격히 커지
지 않음
빌드 속도 영향 없음
디버깅이 힘들 수 있음
Shared Project
.vcxitems
버전 보장 가능
실행 파일 크기도 당연히
늘어남
빌드 속도도 그냥 가져다
쓰기에 .dll보다 느림
디버깅 용이
파일 경로를 설정하는 방법
라이브러리에 포함되는 파일 경로를 설정하면서 ../ 등으로 사용하는 것을 보았을 것
이다.
이와 같이 파일 경로를 설정하는 방법 또한 다양하게 존재한다.
ALLPPT Layout Clean Text Slide for your Presentation
절대 경로와 상대 경로
절대 경로는 말 그대로 모든 경로를 다 쓰는 것이다.
D:ProjectsConsoloWindowTestTest0SharedTest
위와 같이 공유 프로젝트의 경로를 다 쓰는 것이다.
이런 경우 내 PC에서는 잘 동작할 수 있으나 다른 PC에서는 경로가 달라져 문제가
생길 수 있다.
이때 상대 경로를 사용하면 쉽게 해결된다.
프로젝트 설정에서 라이브러리 경로를 설정하였었기에 기본적으로 현재 위치는 프
로젝트의 경로이다.
./ 로 현재 경로를 표현할 수 있다.
그리고 ../를 작성하면 현재 경로의 이전 폴더를 가리키게된다.
그래서 이전 라이브러리를 포함할 때 ../StaticLib 폴더를 설정하여 라이브러리 프로젝
트 폴더를 포함하였다.
ALLPPT Layout Clean Text Slide for your Presentation
Visual Studio에서 제공하는 매크로 경로
Visual Studio에서는 $(매크로명)으로 경로 정보를 제공하는 기능이 있다.
$(SolutionDir) - 현재 솔루션의 경로를 가져옴.
$(Configuration) - 현재 설정(Debug, Release 등) 이름을 가져옴.
$(Platform) - 현재 플랫폼(Win32, x64 등) 이름을 가져옴.
그래서 프로젝트 설정에서 빌드, 설정, 플랫폼 별로 폴더를 다르게 나오도록 하고싶
다면 프로젝트 설정에서 출력 디렉터리를
$(SolutionDir)$(Configuration)$(Platform)
위와 같이 작성해주는 방법을 사용할 수 있다.
ALLPPT Layout Clean Text Slide for your Presentation
Cover
감사합니다

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

정적 라이브러리와 동적 라이브러리 Feat.Shared Project

  • 1. Cover PPT 템플릿 출처: http://www.free-powerpoint-templates-design.com 정적 라이브러리와 동적 라이브러리 Feat. Shared Project 데브루키 쿵쾅(김광일)
  • 4. 라이브러리 라이브러리는 함수 또는 클래스 등 기능의 집합이다. C에서 사용했던 stdlib 또한 c언어에서 사용하는 다양한 기능들의 집합인 라이브러리 이다. 직접 외부 라이브러리를 개발하게 되면 기능별로 프로젝트를 분리하여 개발할 수 있 다. 많은 기능들이 라이브러리로 제공한다. (DirectX, OpenGL 등 그래픽스 라이브러리, FMOD와 같은 사운드, PhysX 같은 물리 엔진 등) ALLPPT Layout Clean Text Slide for your Presentation
  • 5. 정적 라이브러리 (Static Library) 정적 라이브러리(Static Library)는 프로그램을 작성하고 컴파일하여 링크 단계에서 라 이브러리(.lib 파일)를 실행 파일에 복사하여 포함시키는 것이다. 이때 실행 파일의 크기가 커지는 단점이 있지만 별도의 추가 작업 없이 라이브러리의 기능을 사용할 수 있는 점과 실행 파일에 포함되어 있기 때문에 라이브러리가 올바른 버전이라는 확신을 가질 수 있는 장점이 있다. ALLPPT Layout Clean Text Slide for your Presentation
  • 6. 정적 라이브러리 만들기 프로젝트를 생성한다. 그리고 솔루션에 새 프로젝트를 추가한다.
  • 7. 정적 라이브러리 만들기 Windows 데스크톱 항목에서 정적 라이브러리를 선 택하고 생성한다.
  • 8. 정적 라이브러리 만들기 정적 라이브러리 프로젝트에 코드를 추가한다 간단하게 a와 b를 더하는 함수를 작성하였다.
  • 9. 정적 라이브러리 만들기 빌드를 하면 방금 만든 기능의 .lib 파일이 나온다.
  • 10. 정적 라이브러리 만들기 빌드를 하면 방금 작성한 코드가 담긴 .lib 파일이 나온다.
  • 11. 정적 라이브러리 사용하기 이제 정적 라이브러리를 프로젝트에 포함시켜본다. 프로젝트 속성에 C/C++ - 일반에 추가 포함 디렉터리 정적 라이브러리의 헤더 파일이 있는 경로를 추가해준다. 라이브러리를 사용할 때에는 헤더 파일이 필요하다. (선언부) .lib 파일만 있으면 어떤 기능이 들어있는지는 알 수 없다. 그래서 헤더 파일에서 기능을 호출할 때 lib을 사용한다. 그래서 추가 포함 디렉터리에 포함시키거나 헤더 파일만 옮겨 오는 방법 등을 사용하면된다.
  • 12. 정적 라이브러리 사용하기 이제 .lib 파일을 포함시켜준다. 먼저 프로젝트에 .lib 경로를 포함하도록 하기 위해 링커 - 일반에서 추가 라이브러리 디렉터리에 .lib 파일이 있는 경로를 추가한다.
  • 13. 정적 라이브러리 사용하기 .lib 파일을 프로젝트에 포함하는 방법을 3가지 정도 소개한다. 먼저 코드상에서 포함하는 방법이다. #pragma comment(lib, “.lib파일명”) 위와 같이 작성하면 정적 라이브러리 파일을 빌드 중에 링커 단계에서 실행 파일에 포함시킬 것이다.
  • 14. 정적 라이브러리 사용하기 두번째 방법으로는 링커 - 입력에서 추가 종속성에 .lib 파일을 포함시킨다.
  • 15. 정적 라이브러리 사용하기 마지막 방법으로는 프로젝트의 참조에 참조 추가를 하는 방법이다. 해당 방법을 이용하면 추가 포함 디렉터리, 추가 포함 라이브러리 등 추가하지 않고 라이브러리가 포함된다. 한 솔루션 내에서 작업한다면 가장 편한 방법이다.
  • 16. 동적 라이브러리 (Dynamic Link Library) 동적 라이브러리(Dynamic Link Library)는 이름 그대로 프로그램 실행 파일에 연결 되지 않고 동적으로 프로그램이 실행될 때 연결하거나 런타임 중에 연결하여 사용할 수 있는 라이브러리이다. 정적 라이브러리와 달리 실행 파일에 포함되지 않기 때문에 실행 파일의 크기가 커지 지 않고 완전 별도의 기능의 묶음처럼 사용하여 다른 프로그램에도 사용할 수 있게 배 포도 할 수 있다. 단, 사용하는 방법은 정적 라이브러리보다 조금 복잡하다. 간단하게 DLL 예제를 만들면서 알아본다. ALLPPT Layout Clean Text Slide for your Presentation
  • 17. 동적 라이브러리 만들기 정적 라이브러리와 마찬가지로 솔루션에 새 프로젝트로 DLL을 추가해준다.
  • 18. 동적 라이브러리 만들기 소스 코드를 추가해준다. 네모칸 외에는 기본적으로 생성된 코드들이다.
  • 19. 동적 라이브러리 만들기 작성한 코드의 헤더 파일에 매크로를 작성 한 것을 볼 수 있다. DLL에서 .dll과 .lib 파일을 만들 때에는 __declspec(dllexport)를 외부에서 사용할 함수 또는 클래스명 앞에 붙여야 하고 외부에서 사용할 때에는 __declspec(dllimport)를 붙여야 사용된다. 결론적으로 DLL 프로젝트 내부에서만 동작하는 기능이 있을 것이고 외부에서 사용할 기능이 있을 때 붙여주는데 옆의 코드와 같이 매크로로 작성하고 DLL 프로젝트에는 기본적으로 DLL_EXPORTS와 같은 매크로 를 #define 하도록 하여 사용한다.
  • 20. 동적 라이브러리 만들기 매크로는 코드에 넣어도 되지만 프로젝트 속성 페이지에서 전처리기에 추가하는 방법도 있다.
  • 21. 동적 라이브러리 만들기 DLL 프로젝트를 빌드하면 다음과 같이 파일들이 나온다. 정적 라이브러리와 다르게 .dll 파일이 추가로 나오는데 두 가지 방법으로 프로젝트에 포함할 수 있다.
  • 22. 동적 라이브러리 사용하기 그 방법 중 첫 번째로 암시적 링킹이 있다. 암시적 링킹은 정적 라이브러리와 동일하게 .lib 파일을 #pragma comment, 프로젝트 속성, 참조 추가 등으로 프로젝트에 포함시킨다. 암시적 링킹(Implicit Linking)
  • 23. 동적 라이브러리 사용하기 .dll 파일을 만들었는데 .lib 파일을 포함한다고 하니 이상하다고 생각될 것이다. 암시적 링킹(Implicit Linking)
  • 24. 동적 라이브러리 사용하기 DLL 프로젝트에서 나온 .lib 파일은 Import Library 역할을 한다. 그리고 어떤 DLL을 사용할지에 대한 정보를 가지고 있다. 파일 용량을 봐도 알 수 있을 것이다. 이와 같이 암시적 링킹은 컴파일 링크 단계에서 정적 라이브러리처럼 DLL 파일의 .lib 파일을 실행파일에 포함한다. 하지만 용량이 그리 크지 않기 때문에 실행파일 크기도 그렇게 커지지 않 는다. 암시적 링킹(Implicit Linking)
  • 25. 동적 라이브러리 사용하기 명시적 링킹은 프로그램이 실행중(Runtime)에 DLL을 링크하여 포함되어 있는 기능을 사용하는 방법이다. 명시적 링킹(Explicit Linking)
  • 26. 동적 라이브러리 사용하기 Window 함수도 사용해야하고 조금 사용법은 복잡하다. LoadLibrary를 통해 DLL을 로드한다. GetProcAddress 함수 콜을 통해 Add라는 DLL의 함수를 가져온다. 그리고 콜하지만 하지만 현재 코드에서 바로 동작하지 않는다. 명시적 링킹(Explicit Linking)
  • 27. 동적 라이브러리 사용하기 DLL 프로젝트에서 Add라는 함수를 만들고 프로그램 실행 중 윈도우 함수를 통해 가져와서 실행을 하였는데 왜 안되는 것인가? DLL 파일 명도 맞고 함수 명도 맞다! 하지만 여기서는 C++의 특징때문에 함수명이 조금 특이해진다. 명시적 링킹(Explicit Linking)
  • 28. 동적 라이브러리 사용하기 DLL Function Viewer라는 것을 이용하여 DLL 파일을 열어보면 내가 작성한 Add 함수의 이름이 이상한 것을 볼 수 있다. 이와 같이 함수명을 가지게 되는 이유는 C++이 객체 지향의 특징을 갖게 되고 그 중 다형성이라는 특징때문이다. 동일한 함수명으로 다른 기능을 구현하는 오버로딩에 의해 그 함수들을 구 분짓기 위해 함수명이 저렇게 변한다고 한다. 명시적 링킹(Explicit Linking)
  • 29. 동적 라이브러리 사용하기 내가 작성한 함수명을 온전하게 가져오고 싶다면 Export 함수 앞이나 코드블럭을 하나 만들어서 extern “C”로 감싸준다. 그럼 C언어 규칙으로 링크를 하게되어 함수명이 내가 작성한대로 나온다. 기본적으로 cpp 코드는 extern “C++”이 암묵적으로 붙어있다고 한다. 이와 같이 수정 후 이전 코드에서 실행하면 잘 동작한다. 이렇게 런타임 중에 링크를 하는 것이 명시적 링킹이다. 명시적 링킹(Explicit Linking)
  • 30. 공유 프로젝트 (Shared Project) 공유 프로젝트(Shared Project)는 이름 그대로 프로젝트의 소스 코드를 공유하는 프로 젝트이다. 말 그대로 공유 받아서 사용하기 때문에 내 프로젝트와 같이 빌드 된다. 그런데 개인 프로젝트나 회사내 프로젝트라면 사실 통째로 빌드하는게 더 편할 수 있 기 때문에 공유 프로젝트 사용도 괜찮다고 생각한다. ALLPPT Layout Clean Text Slide for your Presentation
  • 31. 공유 프로젝트 만들기 솔루션에 프로젝트 추가를 하여 기타에 공유 항목 프로젝트를 추가한다.
  • 32. 공유 프로젝트 만들기 공유 프로젝트를 추가하고 소스 코드도 추가하여 작성한다.
  • 33. 공유 프로젝트 만들기 내 프로젝트에 포함 시키는 방법은 참조 추가에가서 공유 프로젝트 항목에 보면 새로 추가한 것이 있을 것이다. 체크를 해준다.
  • 34. 공유 프로젝트 만들기 그리고 내 프로젝트에서 그냥 헤더파일 include 하고 구현한 기능을 사용 하면된다. 필요에 따라 기능의 집합을 라이브러리 형태가 아닌 오픈소스로 제공한다 면 이와 같이 공유 프로젝트를 사용하는 것도 좋을 것이다.
  • 35. 비교 정적 라이브러리 .lib 버전 보장 가능 실행 파일이 .lib 만큼 커짐 빌드 속도 저하 디버깅이 힘들 수 있음 동적 라이브러리 .dll 버전 보장은 알 수 없음 실행 파일이 급격히 커지 지 않음 빌드 속도 영향 없음 디버깅이 힘들 수 있음 Shared Project .vcxitems 버전 보장 가능 실행 파일 크기도 당연히 늘어남 빌드 속도도 그냥 가져다 쓰기에 .dll보다 느림 디버깅 용이
  • 36. 파일 경로를 설정하는 방법 라이브러리에 포함되는 파일 경로를 설정하면서 ../ 등으로 사용하는 것을 보았을 것 이다. 이와 같이 파일 경로를 설정하는 방법 또한 다양하게 존재한다. ALLPPT Layout Clean Text Slide for your Presentation
  • 37. 절대 경로와 상대 경로 절대 경로는 말 그대로 모든 경로를 다 쓰는 것이다. D:ProjectsConsoloWindowTestTest0SharedTest 위와 같이 공유 프로젝트의 경로를 다 쓰는 것이다. 이런 경우 내 PC에서는 잘 동작할 수 있으나 다른 PC에서는 경로가 달라져 문제가 생길 수 있다. 이때 상대 경로를 사용하면 쉽게 해결된다. 프로젝트 설정에서 라이브러리 경로를 설정하였었기에 기본적으로 현재 위치는 프 로젝트의 경로이다. ./ 로 현재 경로를 표현할 수 있다. 그리고 ../를 작성하면 현재 경로의 이전 폴더를 가리키게된다. 그래서 이전 라이브러리를 포함할 때 ../StaticLib 폴더를 설정하여 라이브러리 프로젝 트 폴더를 포함하였다. ALLPPT Layout Clean Text Slide for your Presentation
  • 38. Visual Studio에서 제공하는 매크로 경로 Visual Studio에서는 $(매크로명)으로 경로 정보를 제공하는 기능이 있다. $(SolutionDir) - 현재 솔루션의 경로를 가져옴. $(Configuration) - 현재 설정(Debug, Release 등) 이름을 가져옴. $(Platform) - 현재 플랫폼(Win32, x64 등) 이름을 가져옴. 그래서 프로젝트 설정에서 빌드, 설정, 플랫폼 별로 폴더를 다르게 나오도록 하고싶 다면 프로젝트 설정에서 출력 디렉터리를 $(SolutionDir)$(Configuration)$(Platform) 위와 같이 작성해주는 방법을 사용할 수 있다. ALLPPT Layout Clean Text Slide for your Presentation