결국 저번에 컴파일했을 때의 오류는
visual studio 의 컴파일시 설정 2개를 바꿔줌으로써 해결이 되었다.
1. 프로젝트 -> 속성 탭
구성속성 -> 일반 -> ATL사용 정적 ATL 사용
2. 프로젝트 -> 속성 탭
구성속성 -> C/C++ -> 코드 생성
런타임 라이브러리 를 다중스레드 (/MT)로 바꾸니 되었다.
결국 실행에서의 문제는 라이브러리가 설치되어있지 않은 프로젝트를
만들때는 라이브러리를 정적으로 이용할 수 있게 프로젝트
설정을 해 두어야 한다는점
ATL설명
ATL (Active Template Library)
ATL[에이티엘]은 C++ 또는 비주얼 C++를 이용하여 ASP 코드나 다른 액티브엑스 프로그램 컴포넌트를 만들 때 사용하는 마이크로소프트의 프로그램 라이브러리이다. 사용자 요구사항을 웹서버 내에 있는 프로그램으로 전달하기 원하는 웹사이트 개발자는, CGI 프로그램을 작성하거나, 만약 서버가 IIS라면 HTML 페이지 내에 스크립트를 포함할 수 있다. 이러한 페이지 자체를 ASP라고 부르는데, ".asp"라는 파일이름 확장자를 갖는다. ASP 내의 그 스크립트는 그 페이지가 사용자에게 보내지기 전에 서버에서 해석되고 실행된다. 다른 접근방식은 대개 C++로 작성되고 컴파일된 프로그램을 차례로 호출하는 스크립트(마이크로소프트의 VBScript 또는 JScript로 작성된)를 가지는 것이다. 컴파일된 프로그램은 스크립트보다 빠르게 실행되기 때문에, 웹페이지가 더 빠르게 만들어져서 사용자에게 신속히 전달될 것이다. 또한 C++ 프로그램은 스크립트에 비해 운영체계와 좀더 밀접하게 인터페이스할 수 있다는 점을 포함하여, 여러 가지 다른 장점이 있다.그러나 다른 한편으로는, C++ 언어로 프로그램을 작성하는 것은 스크립트 언어로 프로그램을 작성하는 것보다 더 어렵고 시간이 많이 걸린다는 측면이 있다. ATL은 ASP 페이지 상의 스크립트에서 호출할 수 있는 COM 객체를 만들 수 있게 해준다. 마이크로소프트에 의하면, 이러한 객체들은 빠르고, 여러가지 강점을 가지고 있다고 한다. ATL을 이용하여 만들게되는 객체들은 모든 콘트롤, 익스플로러 콘트롤, 프로퍼티 페이지 및 대화상자 등을 포함한다. |
라이브러리 옵션
Visual C++ 컴파일러 옵션
/MD, /MT, /LD(런타임 라이브러리 사용) 다중 스레드 모듈이 DLL인지 나타낼 수 있고 런타임 라이브러리의 정식 또는 디버그 버전을 선택할 수 있습니다.
/MD[d]
/MT[d]
/LD[d] | 옵션 | 설명 |
|---|
/MD | 응용 프로그램에서 다중 스레드 DLL 전용 버전의 런타임 라이브러리를 사용하도록 지정합니다. _MT 및 _DLL을 정의하고, 라이브러리 이름인 MSVCRT.lib를 .obj 파일에 추가하도록 컴파일러에 지정합니다. 이 옵션을 사용하여 컴파일한 응용 프로그램은 MSVCRT.lib에 정적으로 링크됩니다. 이 라이브러리는 링커가 외부 참조를 확인할 수 있도록 하는 코드 계층을 제공합니다. 실제 작업 코드는 MSVCR80.DLL에 포함되어 있습니다. 이 dll은 런타임에 MSVCRT.lib에 링크된 응용 프로그램에서 사용할 수 있어야 합니다. /MD를 정의된 _STATIC_CPPLIB와 함께 사용하면(/D_STATIC_CPPLIB) 응용 프로그램이 동적 버전(msvcprt.lib) 대신 정적 다중 스레드 표준 C++ 라이브러리(libcpmt.lib)를 사용하여 링크하는 동시에 msvcrt.lib를 통해 기본 CRT에 동적으로 링크하게 됩니다. | /MDd | _DEBUG, _MT 및 _DLL을 정의하고, 응용 프로그램에서 디버그 다중 스레드 DLL 전용 버전의 런타임 라이브러리를 사용하도록 지정합니다. 또한, 이 옵션을 사용하면 컴파일러는 라이브러리 이름인 MSVCRTD.lib를 .obj 파일에 추가합니다. | /MT | 응용 프로그램에서 다중 스레드 정적 버전의 런타임 라이브러리를 사용하도록 지정합니다. _MT를 정의하며, 링커가 LIBCMT.lib를 사용하여 외부 기호를 확인하도록 컴파일러가 라이브러리 이름인 LIBCMT.lib를 .obj 파일에 추가합니다. | /MTd | _DEBUG 및 _MT를 정의합니다. 또한, 이 옵션을 사용하면 링커가 LIBCMTD.lib를 사용하여 외부 기호를 확인하도록 컴파일러가 라이브러리 이름인 LIBCMTD.lib를 .obj 파일에 추가합니다. | /LD | DLL을 만듭니다. /DLL 옵션을 링커로 전달합니다. 링커는 DllMain 함수를 찾지만 이 함수가 꼭 있어야 하는 것은 아닙니다. DllMain 함수를 작성하지 않으면 링커는 TRUE를 반환하는DllMain 함수를 삽입합니다. DLL 시작 코드를 링크합니다. 내보내기 파일(.exp)을 명령줄에서 지정하지 않으면 가져오기 라이브러리(.lib)를 만듭니다. 그런 다음, 사용자의 DLL을 호출하는 응용 프로그램에 가져오기 라이브러리를 링크합니다. /Fe(EXE 파일 이름 지정)를 .exe 파일이 아닌 DLL 파일을 이름 지정하는 것으로 해석합니다. 따라서, 기본 프로그램 이름은 basename.exe가 아니라 basename.dll이 됩니다. /MD를 명시적으로 지정하지 않으면 /MT가 암시적으로 적용됩니다. | /LDd | 디버그 DLL을 만듭니다. _MT 및 _DEBUG를 정의합니다. |
C 런타임 라이브러리 및 /clr(공용 언어 런타임 컴파일)를 사용하여 컴파일할 때 사용되는 라이브러리에 대한 자세한 내용은 C Run-Time Libraries를 참조하십시오. 링커의 특정 호출에 전달되는 모든 모듈은 동일한 런타임 라이브러리 컴파일러 옵션(/MD, /MT, /LD)을 사용하여 컴파일해야 합니다. 런타임 라이브러리의 디버그 버전 사용에 대한 자세한 내용은 Run-Time Library Reference를 참조하십시오. 적당한 C 런타임 라이브러리를 선택하는 방법은 기술 자료 문서 Q140584에서도 설명합니다. DLL에 대한 자세한 내용은 DLL을 참조하십시오. Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 방법: 프로젝트 속성 페이지 열기를 참조하십시오. C/C++ 폴더를 클릭합니다. 코드 생성 속성 페이지를 클릭합니다. 런타임 라이브러리 속성을 수정합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
|
댓글 없음:
댓글 쓰기