출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=7451

 

Runtime Library

 

Visual C++ 프로젝트 속성에서 C/C++ -> Code Generation -> Runtime Library 항목을 보면 다음과 같은 4가지 값이 있는데..

/MT
/MTd
/MD
/MDd

/MD, /MDd 옵션에서는 MSVCRT~~~.dll을 쓴다. depends.exe 를 통해 확인

 

혹시 MSVCRT~~.dll 브라더스 땜에 실행 파일 배포시에 문제가 생긴다면 (1)을 고려해 볼만 하다.

아니면 옵션을 바꿔서 컴파일을 다시 하덩가.

 

manifest 파일

 

Visual Studio 2005 부터는 manifest 파일은 무조건 generate 되도록 했다고 한다. msdn에서 보니깐...

그건 그거고 실행파일에 embed 시킬지 말지는 프로젝트 속성에서 정할 수 있다.

 

예전에 manifest 파일내용과 depends.exe 로 살펴본 dll 들이 달라서 실행파일이 실행되지 않은 경우가 있었다.

notepad 로 manifest 파일을 열어보고서야 알았는데...

VC++ 6.0프로젝트를 컨버팅하다 발생한 현상인지, VS2005 버그인지, MS에서 의도한 걸 내가 잘못 이해했던지.. 중에 하나일듯.

manifest 파일때문에 실행파일에 오류가 발생되는 것이 의심될 때
1. 프로젝트 속성->Manifest Tool->Input and Output->Embed Manifest->No 로 설정.
2. 컴파일 한후 ***.manifest 파일을 노트패드에서 연다. manifest파일 이름은 프로젝트 속성->Linker->Manifest File->Manifest File에서 확인
3. 파일 내용을 편집한다. 편집내용은 (2)를 참고

sample:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

4. mt.exe 를 실행해서 실행파일에 manifest 파일을 embed 시킨다.
mt.exe 사용은 (3)을 참고.

sample:
mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1

 

 

 

 

<Reference>
(1) Microsoft Visual C++ 2005 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=en

(2) Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies 
http://msdn2.microsoft.com/en-us/library/ms235342.aspx

(3) How to: Embed a Manifest Inside a C/C++ Application
http://msdn2.microsoft.com/en-us/library/ms235591.aspx

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,