본문 바로가기

Programming/MFC

Release

MFC] 작성된 프로그램을 배포하는 방법
운영진 Date : 09-10-28 15:01 Hit : 1774
트랙백 주소 : http://www.tipssoft.com/bulletin/tb.php/FAQ/596
팁스소프트에서 제공하는 프로그래밍과 관련된 자료나 정보들을 무단으로 복제하거나 게재하는 행위는
상호간의 신뢰를 무너뜨리는 행위이며, 법적인 문제를 야기할 수 있으므로 각별한 주의를 당부드립니다.
* 팁스소프트 저작권 정책 보기 - http://www.tipssoft.com/bulletin/tb.php/FAQ/637
이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
프로그램의 개발이 끝난 후, 실행파일이 잘 실행되는지 확인한 후에, 이 실행파일을 Visual C++가
설치되지 않은 다른 PC에 옮겨서 실행을 해보면, DLL이 없다고 오류가 발생합니다.
이런 오류는 두 가지 방법으로 해결할 수 있습니다. 첫번째는 컴파일 세팅을 조금만 바꾸어 새로
컴파일해서 실행파일을 배포하는 방법이고, 두번째는 필요한 DLL을 실행파일과 같이 배포하는
방법입니다. 두번째 방법은 DLL의 크기가 좀 크기 때문에 그렇게 권장할만한 방법은 아닙니다.
이번 글에서는 이 두가지 방법에 대해서 알아보도록 하겠습니다.
1. 컴파일 모드에 대하여...
프로그램을 개발하는 프로젝트에서 컴파일 모드는 크게 두 종류로 나눌 수 있습니다. 우리가 흔히
이야기하는 디버그(Debug) 모드와 릴리즈(Release) 모드입니다.

보통 디버그 모드는 프로그램을 개발할 때, 사용을 많이 합니다. 코드 생성이 디버깅이 가능하도록
생성되기 때문에 개발도중에 발생하는 여러 가지 문제점을 파악하는데 유리하도록 코드가 구성되어
있습니다.
이렇게 개발하고 디버깅을 완료하여, 프로그램이 완성되어 사용자에게 배포할 때에는 릴리즈 모드로
컴파일해서 실행파일을 만들어 그 실행파일을 배포합니다.
릴리즈 모드로 컴파일하면 컴파일러는 각종 필요 없는 정보를 제거하고 가장 최적화된 코드를 생성해
줍니다. 따라서 디버그 모드보다. 릴리즈 모드가 컴팩트하면서도 수행능력은 더 뛰어납니다.
2. 컴파일 모드 변경하기
컴파일 모드는 Visual C++의 메뉴에서 "Build" 를 선택하고 "Set Active Configuration" 을 선택한 후
나오는 대화 상자를 이용하여 변경할 수 있습니다.
이 대화상자에서 어떤 것을 선택하는지에 따라서 릴리즈 또는 디버그 모드로 컴파일 할 수 있습니다.
그리고 컴파일 모드를 자주 변경하는 경우는, 툴바를 추가하여 사용하시면 됩니다. 툴바는 메뉴에서
"Tools"를 선택하고 "Customize..."를 선택한 후 나오는 대화상자를 이용하여 추가할 수 있습니다.
이 대화상자에서 여러 개의 탭중에 "ToolBars" 를 선택합니다. 그리고 나열된 항목들 중에서 "Build"가
선택되어 있지 않다면 "Build" 메뉴를 선택하시고 중복되는 "Build MiniBar"는 선택을 해제하시면,
아래와 같은 툴바는 사라지고
아래와 같은 툴바가 추가됩니다.
이 툴바가 있으면 "Set Active Configuration" 대화상자를 호출할 필요 없이 툴바의 콤보박스를
이용하여 디버그 모드와 릴리즈 모드를 쉽게 선택하여 변경할 수 있습니다.
또한 도구 표시줄을 마우스 오른쪽 클릭하여 나오는 메뉴에서도 "Build" 툴바를 추가시킬 수 있습니다.
3. 컴파일 모드별 실행에 필요한 정보
먼저 디버그 모드로 설정된 상태에서 살펴보겠습니다. 메뉴 중, "Project" 메뉴에서 "Settings"를
선택하면 다음과 같은 대화상자가 나타납니다. (Alt + F7 을 사용하셔도 됩니다.)
이 대화상자에서는 "Microsoft Foundation Classes"라고 되어 있는 콤보 박스를 잘 보셔야 합니다.
일반적으로 아래와 같이 두 개의 항목으로 이루어져 있습니다.
Use MFC in a Static Library
Use MFC in a Shared DLL
기본적으로 "Use MFC in a Shared DLL" 가 설정되어 있습니다. 이 설정은 현재 개발중인 프로그램이
필요로 하는 라이브러리를 기본적으로 제공되는 DLL에서 참조하여 사용하겠다는 뜻입니다. 따라서
이 모드로 컴파일을 하여 실행파일을 배포하려면, 해당 컴파일에 Visual C++가 설치되어 있거나
다음과 같은 DLL이 있어야 합니다.
mfc42d.dll, mfco42d.dll, msvcirtd.dll, msvcrtd.dll
물론 이 네 종류의 DLL 파일이 모두 있어야 하는 것은 아닙니다. 개발된 프로그램의 성격에 따라서
이 중 한 개정도가 필요 없을 때도 있습니다.
이 DLL은 이름이 mfc42d.dll과 같이 d로 끝나는데, 이 d는 "Debug" 의 약자로 생각하시면 됩니다.
이 파일들은 윈도우 시스템이 설치된 폴더의 "system32" 폴더 아래에 있습니다. 필요하다면, 해당
폴더에서 이 dll들을 복사해서 실행파일을 배포할 때 같이 배포하면 됩니다.
사실, 어떤 경우에 보면, 실행파일은 크기가 얼마되지 않는데 같이 붙어 다니는 dll의 사이즈가 엄청
큰 이상한 경우가 발생 하기도 합니다.
"Use MFC in a Static Library" 로 설정되어 있는 경우 컴파일을 하고 나서 실행파일을 배포할 때
별도의 dll을 같이 제공할 필요가 없습니다. 실행파일만 제공하면 되죠. 하지만, 이 방법은 별도의
dll이 없는 반면에 실행 파일의 사이즈가 좀 크다는 단점이 있습니다.
이 두 가지를 놓고 볼 때, 다음과 같이 일반적인 결론을 내릴 수 있습니다. 단순히 하나의 실행파일을
가지는 프로그램인 경우, "Use MFC in a Static Library" 를 사용해서 컴파일 하는 것이 비교적
유리하고 여러 개의 실행파일과 또는 dll이 사용되는 프로그램인 경우 각각의 실행파일 사이즈를
줄일 수 있는 "Use MFC in a Shared DLL"을 사용하는 것이 더 유리하다고 할 수 있습니다. 따라서
개발자가 이 두 가지 상황을 잘 판단해서 사용하면 될 것 같습니다.
릴리즈 모드도 디버그 모드랑 거의 대부분 동일합니다. 아래의 그림과 같이 컴파일 모드를 릴리즈
모드로 선택합니다.
그리고 동일한 방법으로 프로젝트 세팅을 선택하면 디버그와 동일한 상태로 나옵니다. 대부분 위에서
설명한 그대로 입니다. 하지만 "Use MFC in a Shared DLL"에서 조금 차이가 있습니다. 실행할 때
필요로 하는 dll의 이름이 조금 다릅니다. 디버그 모드로 사용하는 dll의 이름에서 d를 빼면 됩니다.
목록은 다음과 같습니다.
mfc42.dll, mfco42.dll, msvcirt.dll, msvcrt.dll
나머지는 디버그 모드에서 설명한 내용과 유사하여 설명을 줄이겠습니다.
프로그램을 개발할 때는 Debug 모드 "Use MFC in a Shared DLL"로 컴파일해서 사용하는 것이
일반적이고 개발이 완료된 후에 배포할 때는 Release 모드 "Use MFC in a Static Library"
사용해서 컴파일 하는 것이 일반적입니다.

출처 : http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=596