Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

정적 라이브러리 본문

Programming Language/C++

정적 라이브러리

scarecrow1992 2021. 5. 6. 23:40

ko.wikipedia.org/wiki/C%2B%2B_%ED%91%9C%EC%A4%80_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC

 

정의

  • 소프트웨어 개발 시 사용되는 프로그램의 구성요소
  • 공통으로 사용될 수 있는 특정한 기능(들)을 모듈화한 것
  • 대상 환경(플랫폼)에서 바로 실행될 수 있는 형태로 제공됨

$\therefore$ 라이브러리는 동작하는 완전한 프로그램이 아닌, 특정한 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어의 형태로 (또는 대상 플랫폼에 따라서는 바이트코드로) 존재하는 프로그램이다.

 

 

정적라이브러리 만들기

docs.microsoft.com/ko-kr/cpp/build/walkthrough-creating-and-using-a-static-library-cpp?view=msvc-160

솔루션 탐색기에 파일들이 위와같이 표시되도록 설정해준다.

 

MathLibrary.h와 MathLibrary.cpp을 아래와 같이 작성한다.

// MathLibrary.h
#pragma once
 
namespace MathLibrary
{
    class Arithmetic
    {
    public:
        // Returns a + b
        static double Add(double a, double b);
 
        // Returns a - b
        static double Subtract(double a, double b);
 
        // Returns a * b
        static double Multiply(double a, double b);
 
        // Returns a / b
        static double Divide(double a, double b);
    };
}
 
 
 
// MathLibrary.cpp
// compile with: cl /c /EHsc MathLibrary.cpp
// post-build command: lib MathLibrary.obj
 
#include "MathLibrary.h"
 
namespace MathLibrary {
    double Arithmetic::Add(double a, double b) {
        return a + b;
    }
 
    double Arithmetic::Subtract(double a, double b) {
        return a - b;
    }
 
    double Arithmetic::Multiply(double a, double b) {
        return a * b;
    }
 
    double Arithmetic::Divide(double a, double b) {
        return a / b;
    }
}
cs

그리고 해당 프로젝트를 빌드하면

....\StaticMath\Debug 경로에 MathLibrary.lib 가 빌드된것을 확인할 수 있습니다.

 

 

 

정적 라이브러리 사용

blessingdev.wordpress.com/2017/09/26/visual-studio%EC%97%90-%EC%99%B8%EB%B6%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0/

docs.microsoft.com/ko-kr/cpp/build/walkthrough-creating-and-using-a-static-library-cpp?view=msvc-160

정적라이브러리를 추가하기 위해선 라이브러리와 헤더를 등록해야한다.

 

1. 라이브러리 등록

라이브러리의 등록은 라이브러리의 경로등록링크할 라이브러리 등록 2가지 과정으로 나뉜다.

라이브러리 경로 등록

라이브러리경로는 크게 3가지 방법으로 추가할 수 있다.

  • OS의 환경변수에 라이브러리의 경로 등록
  • 프로젝트의 속성 페이지를 켜고 [구성속성 $\rightarrow$ 링커 $\rightarrow$ 일반] 의 추가 라이브러리 디렉토리 칸에 MathLibrary.lib의 경로를 지정

 

  • 라이브러리 파일을 프로젝트의 경로에 직접 넣어준다. (이 예에선 ......\MathClient\MathClient에 MathLib.lib를 넣어주면 된다.)

 

링크할 라이브러리 등록

링크할 라이브러리를 등록하는 방법은 크게 2가지로 나뉜다.

  • #pragma once(lib, "xxxx.lib") 를 입력
  • 프로젝트의 속성 페이지를 키고 [링커 $\rightarrow$ 입력 $\rightarrow$ 추가 종속성] 에 추가하고자 하는 라이브러리를 등록

이 예에서는 MathLibrary.lib를 등록하면 된다.

 

 

2. 헤더파일 등록

헤더 파일의 등록 방법도 여러가지로 나뉜다.

  • 환경변수에 헤더파일의 경로 추가
  • 프로젝트의 속성페이지에서 [C/C++ $\rightarrow$ 추가 $\rightarrow$ 일반]의 추가포함 디렉토리에 헤더파일의 경로를 등록

  • 헤더파일을 프로젝트의 경로에 직접 추가

 

 

 

라이브러리를 쓸 준비가 끝났다면 아래 코드를 작성하고 빌드후 실행한다.

 

// MathClient.cpp
 
#include<iostream>
#include "MathLibrary.h"
 
using namespace std;
 
int main(void) {
    cout << "Add : " << MathLibrary::Arithmetic::Add(2.52.0<< endl;
    cout << "Sub : " << MathLibrary::Arithmetic::Subtract(2.52.0<< endl;
    cout << "Mul : " << MathLibrary::Arithmetic::Multiply(2.52.0<< endl;
    cout << "Div : " << MathLibrary::Arithmetic::Divide(2.52.0<< endl;
 
    return 0;
}
cs

 

 

'Programming Language > C++' 카테고리의 다른 글

상속 접근 지정자  (0) 2021.05.14
출력 디렉토리  (0) 2021.05.07
프로젝트 셋팅 - 미리 컴파일된 헤더(Precompiled Header)  (0) 2021.05.05
map 활용  (0) 2021.04.22
vector 정렬하기  (0) 2021.04.21
Comments