본문 바로가기
개발도구

Visual Studio ] 프로그램 배포시 dll 이 없어 실행할 수 없는 문제 해결하기 (vcruntime140.dll, msvcr120d.dll), 정적 링킹

by eteo 2022. 12. 14.

 

 

 

Visual Studio 에서 작성한 프로그램을 다른 PC에서 실행하려고 할 때 .dll 이 없어 실행할 수 없다는 에러가 발생한다.

 


이유 : Visual Studio 프로젝트의 기본 설정값이 "동적 라이브러리" 링크로 설정되어 있기때문에, 실행파일(.exe)에 해당하는 dll 라이브러리가 포함 안되어 있어고 라이브러리(.dll) 파일도 없어서 참조하지 못하는 에러이다.

Visual Stdio 에서 콘솔 프로그램을 만들때 "정적 라이브러리" 방식으로 컴파일하면 프로그램 용량이 늘어날 수 있지만 dll 오류를 방지할 수 있다.

 

 

 


방법1

프로젝트 우클릭 - 속성 - 구성 속성 - C/C++ - 코드생성

런타임 라이브러리 항목을 debug, release 모드에 맞게 다음과 같이 변경한다.

  - Debug    : 다중 스레드 디버그 DLL (/MDd) 에서 다중 스레드 디버그 (/MTd)로 변경
  - Release  : 다중 스레드 DLL (/MD) 에서 다중 스레드 (/MT)로 변경

 

컴파일을 다시 하면, exe 파일에 dll이 포함되어 다른 PC에서 바로 실행시킬 수 있다.

 

 

✔ /MD 와 /MT 옵션의 차이는 CRT(C런타임 라이브러리)의 연결방식이다.

 

  • /MD (Multi-Threaded DLL) : C 런타임 라이브러리를 별도의 dll로 동적으로 링킹해 사용하는 옵션이다. 실행 파일에 CRT 라이브러리가 포함되지 않기 때문에 파일 사이즈가 작아지지만, 대상 시스템에 CRT dll이 없는 경우 프로그램이 동작하지 않는다.  
  • /MT (Multi-Threaded) : C 런타임 라이브러리를 실행 파일내 포함시키는 정적 링킹 옵션이다. 실행파일의 크기가 커지지만 대상 시스템에 설치된 dll에 의존하지 않고 항상 프로그램이 동작한다.

 



방법2

실행할 PC에 재배포 가능 패키지를 설치한다. (dll 파일 검색해서 설치하면 된다.)

 

https://www.ihee.com/537

 

DLL 오류별 재배포 가능 패키지 다운로드 주소

윈도우10을 쓰는 지금도 과거 버전의 DLL이 에러가 나서 고생하는 분들이 많습니다. 이런 프로그램은 원래 동작하던 프로그램이라면 오류가 나는 dll만 교체하면 되지만 가장 확실한 해결 방법은

www.ihee.com

 

참고 :

https://giyatto.tistory.com/41