2017-01-23 1 views
2

독립 실행 형 exe를 생성하도록 프로그램을 컴파일하려고합니다. 실제로 2 문제가 있습니다 :정적 링크로 컴파일 VS2015

속성 -> C/C++ -> 코드 생성 -> 런타임 라이브러리로 이동하여 멀티 스레드 (/ MT)로 변경했습니다.

내가 이런 짓을 한 후, .EXE의 크기가 증가하지만 다른 컴퓨터에서 사용하려고 할 때, 오류가 "이 프로그램을 실행할 수 없습니다, 당신은라는 이름의 DLL이 필요합니다 msvcp140d.dll"

이것은 두 가지 문제입니다. 왜 내가 릴리스 버전을 컴파일하고 있기 때문에 DLL의 디버그 버전을 사용해야하는지 이해하지 못합니다. 그리고 생각한 이후로 DLL을 사용하도록 요청하는 이유를 이해하지 못합니다. 그들은 정적으로 링크되어 있습니다 : :

추신 : 나는 OpenCV3.0 프로젝트를 컴파일하려고합니다. 도움이되는지 아닌지 모르겠습니다./

EDIT : 한 가지 문제가 해결되었습니다. 릴리스 링커에서 opencv_imgproc310d.dll을 사용하여 MSVCP140d.dll을 사용하여 프로그램을 작성했습니다. 이제는 exe가 독립 실행 형이 아닌 문제가 있습니다. DLL이 작동해야합니다. (내 VS를 최신 버전으로 업데이트 했으므로 최신 버전이 있습니다.) 감사합니다

+0

내가 알고있는 한 멀티 스레드를 사용한다고해서 정적 런타임을 사용하는 것은 아닙니다. 그것은 다른 것입니다. –

+0

http://stackoverflow.com/questions/20890458/compile-c-in-vs-without-requiring-msvcp120d-dll-at-runtime 이 게시물에서이 솔루션을 보았습니다./ –

답변

0

/MTd 플래그를 사용하는 경우 외부 종속성 (예 : Microsoft dll 파일)이 필요 없다는 것이 맞습니다. 그러나 실행 파일의 해당 플래그 크기가 증가하기 때문에 (더 많은 바이너리 코드가 포함됨).

귀하의 문제 "이 프로그램을 실행할 수 없습니다, 당신은라는 이름의 DLL이 필요합니다 msvcp140d.dll는"

  • 디버그 : 당신이 멀티를 설정해야합니다 당신이 모두 구성에 대한 런타임 라이브러리를 설정하지 않았기 때문입니다 끼울 수있는 디버그 (/ MTD) 플래그
  • 자료 : 당신이 설정해야 다중 스레드 (/ MT) 플래그 것은

모두를 설정해야합니다, 그렇지 않으면 단 하나 개의 구성이 실행됩니다 .

+0

나는 당신이 말한대로했습니다. 둘 다 수정했지만 그 결과는 여전히 동일합니다. exe ​​파일을 실행할 수 없습니다. 오류 메시지가 여전히 나타납니다. 그리고 그것은 내 컴퓨터에 ... d.dll이 없다고 말합니다 (다시 한번 말하지만, 릴리스 버전을 빌드하고 디버그 DLL을 묻습니다 .../ –

+0

여러 프로젝트가 있습니까? 그렇다면 제대로 설정 했습니까? – fr3nzy90

+0

프로젝트가 하나뿐입니다. 그리고 나는 그를 올바르게 정했다고 생각합니다. –