본문 바로가기

개발자/WPF(C#) UI

Visual Studio에서 프로그램 컴파일 시 dll 포함

반응형

 


[그림 1] "dll을 찾을 수 없습니다."

 

 평소 Visual Studio를 사용하여 프로그래밍을 해서 다른 사람한테 프로그램을 넘겨줄 때

상대방은 Visual Studio가 안깔려있는 경우가 많다.

그러면 상대방이 내가 준 프로그램을 실행시키려 할 때 [그림 1]과 같이 dll을 찾을 수 없다고 하며 실행을 할 수 없는데



그 이유는 visual studio가 default로 동적 라이브러리 방식으로 컴파일을 하기 때문이다.



 따라서 이런 상황이 발생할 경우 컴파일 옵션을 정적 라이브러리 방식으로 바꿔 줘야하는데 Debug모드일 때와

Release모드일 때 설정법이 약간 다르다. 



[그림 2] Compile 옵션 설정 화면



[그림 2]와 같이 Project우클릭 - [Properties] - [Configuration Properties] - [C/C++] - [Code Generation]에 들어가서


    1. Debug 모드 컴파일 시
        - [Runtime Library]항목을 Multi-threaded Debug (/Mtd)로 변경하면 된다.

    2. Release 모드 컴파일 시
        - [Runtime Library]항목을 Multi-threaded (/Mt)로 변경하면 된다.


그러면 dll이 포함되기 때문에 친구가 잘 실행시킬 수 있다.

 

 

-----------------------------------------------------------------------------------------------------------------------------------

추가 퍼온글

Visual Studio 2013 community 에서 매우 간단한 프로그램을 만들어서 virtualbox에서 실행하는데, “MSVCR120D.dll” 이 없어서 실행이 되지 않았다.

 

VS에서 개발할 경우, 기본 옵션으로 필요한 라이브러리들을 dll 로 동적링크를 하도록 되어 있어서 이런 문제가 발생한다고 한다.

 

해결방법은 대부분 프로그램을 실행하고자 하는 컴퓨터에 해당하는 redistribution package 를 찾아서 설치하는 방법이 많았다.

 

프로그램 개발하는 사람이 이 문제를 해결하기 위해서는 dll을 exe에 포함하도록 VS 를 설정하면 된다.

 

Project -> <프로젝트 이름>… Properties… 선택 후 새 창이 뜸

 

새 창에서 -> Configuration Properties -> C/C++ -> Code Generation -> Runtime Library 를 선택 후, debug/release 에 따라 아래와 같이 변경

 

– Debug: Multi-threaded Debug DLL (/MDd) -> Multi-threaded Debug (/MTd)

 

– Release: Multi-threaded DLL (/MD) -> Multi-threaded (/MT)

 

위의 새 창에서 위쪽을 보면 Configuration 부분에 Active(Debug) 로 선택되어 있다. 이 부분을 변경해서 debug/release 각각에 대한 설정을 해준다.

 

다시 빌드해 보면, exe 파일의 크기가 조금 늘어나면서 다른 윈도우에서도 잘 실행이 되는 것을 확인할 수 있었다.

 

Visual Studio 6.0 쓰던 분들이 2010 이상 버전에서 작성된 실행파일을 콘솔에서 실행시켜보면 

닷넷 프레임워크가 설치되어 있지 않은 곳에서는 무슨,, DLL이 없다는 에러가 뜬다. 당황스럽다. (msvcr100.dll, msvcr120.dll 등이 없다고..)


이유 : Visual Studio Project의 기본 설정값이 "동적 라이브러리" 링크로 설정되어 있어서 콘솔 프로그램인 exe에 해당하는 dll 라이브러리가 포함 안되어 있어서 참조 못하는 에러이다.

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

방법1
1. 프로젝트 → 프로젝트 속성
2. 구성속성 → C/C++ → 코드생성
3. "런타임 라이브러리" 항목을 debug, release 모드에 맞게 수정

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

컴파일을 다시 하면, exe 파일에 dll이 포함된다. (당연히 exe 파일 크기는 증가)


방법2
1. 재배포 가능 패키지를 설치한다. (dll 파일 검색해서 설치)

 

 

반응형

'개발자 > WPF(C#) UI' 카테고리의 다른 글

WPF 기본 동작구조  (0) 2020.04.01
c# Joystick 거리, degree->좌표 변환  (0) 2020.04.01
[WPF] UI Thread 연동을 위한 팁  (0) 2020.03.25
[WPF] 아이콘 변경  (0) 2020.03.24
C# WPF MVVM 패턴 활용하기  (0) 2020.03.22