2012-09-12 1 views
0

약간 이상한 문제가 있습니다. 일반적으로 사람들은 msvcrXX.dll에 대한 참조를 실행 파일에서 제거하는 방법을 묻는 경향이 있습니다. : msvcr100.dll을 사용하도록 실행 파일을 강제 실행해야합니다. 내 프로젝트에 CRT를 사용하는 추가 DLL을 연결하고이 DLL에서 msvcr 함수를 가져 오기 때문에 필요합니다./MD가 릴리스 구성의 msvcr100.dll에서 가져 오지 않습니다.

그래서/MD 옵션을 설정하고 "디버그"에서 작업 할 때 (msvcr100.dll이 EXE의 가져 오기 테이블에 있음) 컴파일하지만 "릴리스"를 컴파일하려고 할 때 mylib.dll 및 kernel32.dll에서 가져온 것만으로 훨씬 더 큰 실행 파일을 만들 수 있습니다. 이로 인해 CRT가 제대로 초기화되지 않고 이로 인해 런타임 오류가 발생합니다.

I는 예를 들어, '의 printf'기능을 사용하는 경우, 코드

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

있고.

미리 답변 해 주셔서 감사합니다.

추가 : 해결책 : "#define _DLL"을 코드 시작 부분에 추가하고 msvcrt.lib를 추가 종속성에 추가하십시오. Google은 "/ MD"가해야하는 것, 왜 그렇게하지 않는지 모른다고 말합니다.

+0

왜? 다른 DLL을 사용하고 msvcr100을 가져 오면 완료됩니다. 기본 실행 파일을 imprt로 만들 필요가 없습니다. – bmargulies

+0

예를 들어, 그가'strtok()'을 사용한다면 ([more info] (http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.100%29.aspx)). 어쨌든, 모든 구성에/MD를 설정 했습니까? (/ MDd on debug,/MD on release) – ErikEsTT

+0

릴리스 구성에 대한 설정을 변경하는 것을 잊었습니다. –

답변

0

내가 찾은 해결책 : 코드의 시작 부분에 "#define _DLL"을 추가하고 추가 종속성에 msvcrt.lib를 추가합니다. Google은 "/ MD"가해야하는 것, 왜 그렇게하지 않는지 모른다고 말합니다.

더 이상 아름다운 아이디어는 인정됩니다.

관련 문제