정적 라이브러리 (static library) 빌드하기

글쓴이 Engineer Myoa 날짜

  1. lib 부재

매번 편하게 lib, dll만을 사용했는지, 일전에 아주 바보같은 일을 겪었다.

최근 필요에 의해 zlib 소스를 사용해야할 일이 생겼는데 난처한 상황이 생겼다.

라이브러리 폴더 PATH설정을 마치고 빌드를 실행하니 링커에서 에러가 발생했다.

에러코드 LNK2019 발생하는 것을 보고 헤더파일의 선언은 인식했으나 정의는 제대로 로드되지 않은 같았다.

웃기게도 바보처럼 .c파일을 우째 로드해야하나… 생각을 하였다.

이럴 경우 가지 방법이 있다. 프로젝트 폴더로 소스파일(*.c, *.cpp) 헤더파일(*.h) 프로젝트 폴더로 전부 옮긴 기존 항목 추가로 직접적으로 프로젝트에 포함시키는 방법.

그리고 조금 graceful하게 lib으로 묶는 방법.

방법에 관해서 분명 프로젝트 템플릿에서 본적이 있을 것이다.

물론 모듈제작을 해보지 않았다면 지나쳤을 것이다.

 

이미지를 보면 기억이 것이다. “ 이거 본적있어!”

프로젝트 만들기를 눌러 DLL혹은 정적 라이브러리 항목을 선택해준다.

다만 링킹 개념이 정확하게 확립되지 않았다면 정적으로 묶을 것을 추천한다.

DLL 쓰지도 않을 기능들이 lib 한번에 묶여버리면 프로그램 덩치만 커지고 메모리도 많이 잡아먹으므로 이를 동적으로 로드하는 것으로 해결하기 위해 사용한다.

  1. lib 제작

제작 방법은 매우 간단하다.

src(source) 압축을 해제하면 다양한 소스파일과 헤더파일이 보일 것이다.

안에 분명 lib이나 dll 보이지 않는다. — 소스파일이므로

파일들을 일반 C, C++ 솔루션에 소스파일과 헤더파일넣듯 넣고 빌드하면된다.

혹시라도 어… 소스파일 어떻게 추가해요? 싶다면

소스 파일 디렉터리와 헤더 파일 디렉터리에서 우클릭하여기존 항목 추가라는 메뉴를 선택한다. 그리고 파일을 불러온다.

위와 같이 나온다면 것이다.

이제 빌드하면 된다. 솔루션 구성을 필요에 맞게 Debug혹은 Release 설정한 빌드를 한다.

이제 *.lib파일을 꺼내 필요한 프로젝트에 종속성 추가를 해준다.

  1. 트러블 슈팅

간혹 구버전 혹은 고대에 사용되던 소스의 경우 Deprecated unsafe문제가 발생할 있는데, Deprecated 경우 에러 리스트를 확인하며 수동으로 갱신하거나 awk sed 사용할 있다면 일괄적으로 수정해주는 방법도 있으나 작성에 매우 유의해야 한다.

unsafe문제는 프로젝트 속성 ->

C/C++ -> 전처리기 -> 전처리기 정의에 _CRT_SECURE_NO_WARNINGS 추가해준다.

다만, Windows 환경변수를 수정하듯 구분자(Delimeter) ‘;’. 세미콜론을 사용한다. 그러므로 앞선 정의 뒤에 ; 붙인 NO WARNINGS 추가해주고 마지막에 ; 붙여준다.

ex) SOME_DEFINITIONS;_CRT_SECURE_NO_WARNINGS;

소스사용이 필요한 사람이라면 글을 참고하여 라이브러리로 빌드하여 사용하기 바람..


67개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다