본문 바로가기
Study

Use run-time library 관해..

by 뿡뿡대마왕 2011. 9. 28.
반응형
라이브러리르 링크해서 컴파일시 아래와 비슷한 링크에러를 자주 겪게 된다.
error LNK2005: __strtol already defined int LIBCMT.lib

이번에도 라이브러리를 빌드해서 배포하였는데 라이브러리르 사용하는 프로젝트에서 빌드시 에러가
발생한다는 보고를 받았다.

확인해보니 use run time library 옵션이 맞지 않아 발생하는 에러들이었다.

우리가 라이브러리를 빌드하여 배포할때는 옵션을 Multithreaded 로 옵션을 설정해서 나갔다..
하지만 그 라이브러리를 사용하는 프로젝트에서 Debug모드에서는 MT(multithreaded)로 Release모드에서는 MD(multithread DLL)을 사용하고 있었다..
도대체 어느 옵션에 맞추어 라이브러리를 배포해야 하는건지..;;;
난감하다...

기존에 배포했던 라이브러리 버젼에서는 MT 와 MD 옵션에 상관없이 라이브러리 빌드가 된다고 한다..;;무슨차이인지..거참..
기존 버젼과 이번에 새로 배포된 버젼과의 차이점을 찾아봐야 할듯하다..

모 암튼...
Run time library 옵션에 대해 조사하던 도중 짧고 명쾌하게 정리해놓은 글이 있어 그걸 정리하려 한다.

run time library 옵션은 아래와 같이 6가지
1. Single-threaded
2. Multithreaded
3. Multithreaded DLL
4. Debug Single-Thread
5. Debug Multithreaded
6. Debug Multithreaded DLL

Multithread는 CRT(C run time library)를 정적으로 코드에 포함시키는 방법
strcmp등의 crt 함수 코드가 실행파일이나 dll 등에 포함.
따라서 실행파일의 크기는 커짐

Multithreaded DLL 은 CRT를 dll로 사용
strcmp등의 crt 함수의 위치만 포함, 실제 함수 바디는 msvcrt.dll등에 구현.
따라서 실행파일의 크기는 작아짐

제가 조사한 바로는 링크거는 라이브러리 run time library옵션과 그것을 사용하는 프로젝트 옵션이 동일하게 사용해야만 링크에러 없이 잘 빌드가 된다는 사실이다....

좀더 이부분에 대해 알아봐서 다른 사실이 있다면 다시 포스팅 하도록 하겠다..
현재 시간 밤 12시 42분...
오늘 교촌치킨에 맥주한잔하고 이렇게 글을 올린다...
오늘도 한걸음씩..
한걸음씩..



반응형

댓글