dll 과 lib

2013. 10. 24. 09:07C++

  • 참조 및 출처( 라이브러리와 dll의 장단점 )

    http://blog.naver.com/PostView.nhn?blogId=free2123&logNo=20120095358

     

     LIB

    DLL 

     장점

    1. 속도가 빠르다.

    2. 작성이 간단하다.

    3. 컴파일시에 해당 정적 라이브러리의 내용이 실행 바이너리 안에 포함되기 때문에 함께 배포하지 않아도 된다.

    1. 메인 실행 파일의 사이즈가 작아진다.

    2. dll에 있는 함수들을 다른 곳에서도 호출하여 쓸 수 있으므로 재사용성이 증대된다.

     단점

    1. 실행 파일의 크기가 커진다.

    2. 함수의 재사용성이 코드레벨에서만 가능하다.

    1. 사용이 복잡하다.

    2. 속도가 lib에 비해 느릴 수 있다.

    3. 컴파일시에 해당 동적 라이브러리의 내용이 실행 파일안에 포함되지 않기 때문에, 반드시 실행 파일 배포시에는 라이브러리 역시 함께 배포해야 한다.

     공통점

     코드 작성시에 둘 다 헤더 파일, .lib 파일을 포함시켜야 한다.



http://blog.daum.net/aswip/6365601

라이브러리는 함수, 구조체, 클래스 등을 포함하고 있는 컴파일된 파일이며,
그 종류는 다음과 같이 3가지가 존재한다.

* 정적 라이브러리 (*.a,  *.lib)
* 공유 라이브러리 (*.so, *.dll)
* 동적 라이브러리 (*.so, *.dll)

정적 라이브러리는 컴파일시에 해당 정적 라이브러리의 내용이
실행 바이너리안에 포함되어지는 특징을 갖고 있다.
즉, 실행 파일 배포시에 정적라이브러리를 함깨 배포하지 않아도 된다.

반면, 동적 라이브러리는 컴파일시에 해당 동적 라이브러리의 내용이
실행 파일안에 포함되지 않기 때문에, 반드시 실행 파일 배포시에는
동적 라이브러리 역시 함깨 배포해야 한다.


Step1. Win32 프로젝트 생성 

 

Step2. [정적 라이브러리] 응용 프로그램 종류 선택

 

Step3. 새 항목 추가 (MyLib.c, MyLib.h)

 

 Step4. 소스 파일 작성 (MyLib.c, MyLib.h)

----------------------------  MyLib.h ----------------------------

#ifndef MYLIB_H
#define MYLIB_H

#ifdef __cplusplus
extern "C" {
#endif

int MyPlus(int x, int y);

#ifdef __cplusplus
}
#endif

#endif MYLIB_H

 

----------------------------  MyLib.c ----------------------------

#include "MyLib.h"

int MyPlus(int x, int y)
{
    return (x + y);
}

여기 까지 진행 후에 빌드 하게 되면, Debug 폴더 밑에 "ExMyLib.lib"파일이 생성됩니다.

 

Step5. 정적 라이브러리 사용을 위한 "빈 프로젝트" 생성

 

 

Step6. 소스 파일 추가 (main.c)

 

----------------------------  main.c ----------------------------

#include <stdio.h>
#include "MyLib.h"

int main(int argc, char **argv)
{
    int nSum = MyPlus(10,20);

    printf("%d\n", nSum);
    return 0;
}

 

Step7. 링커 -> 입력 -> 추가 종속성 설정