2017-12-03 5 views
-1

Visual Studio 2017을 처음 사용합니다. PC에서 C++로 간단한 프로그램을 만들었습니다. 내 프로그램이 다른 PC에서 작동하는지 궁금해. 나는 다른 컴퓨터에 .exe을 실행하기 위해 시도하고 나에게 이런 종류의 오류 준 :다른 컴퓨터에서 .exe (내 컴퓨터에서 컴파일 됨)를 실행하면이 오류가 발생합니다.

vs(some letters and numbers).dll is missing.

내가 문제의 .dll 비주얼 스튜디오의 한 부분이라고 가정합니다.

세 번째 PC에서 시도했는데 cmd이 작동을 멈추고 .exe을 실행하면 응답이 없습니다.

cmd의 g ++ 컴파일 기능을 사용하여 MinGW로 컴파일 할 때도이 문제가 발생합니다. 나는 다른 PC에는 MinGW로 컴파일 된 프로그램을 실행하면, 그것은 나에게 같은 오류를 제공하지만,이 시간이

gw...dll is missing

같은 것을에서 (또는 비주얼 스튜디오를 설치하지 않고는 MinGW를이 오류를 방지 할 수있는 방법이 있나요 말한다 이 시점에서 다른 프로그램을 실행하고 싶습니다.

코드에 관심이 있다면 여기에 넣을 수는 있지만 내 PC에 컴파일 할 때마다 동일한 문제가 있기 때문에 여기서는 문제라고 생각하지 않습니다.

image

+2

Google for _Visual C++ runtime redistributable_ –

+0

오류 메시지에 대한 질문 제목을보다 구체적으로 변경하십시오. –

+0

실행 파일 이름을 언급 할 사람이 있습니까? –

답변

3

비주얼 스튜디오의 경우, 당신은 Visual C++ Redistributable libraries를 설치 또는 .exe 파일로 응용 프로그램에 필요한 라이브러리를 제공해야 (나는 확실하지 않다 : 여기

오류의 사진입니다 라이센스를 위반했거나하지 않는 경우).

MinGW의 경우 필요한 DLL도 제공해야합니다. 나는 당신이 libgcc_s_dw2-1.dlllibstdc++-6.dll을 필요로한다고 생각하지만, 직접 확인하는 것이 좋습니다. 그리고 면허에 대해 기억하십시오.

Dependency Walker을 사용하여 응용 프로그램의 종속성을 분석 할 수 있습니다.

업데이트 (2017-12-12) : 스크린 샷을 게시 한 시간을 놓쳤습니다. 내가보기에 문제는 실행 파일의 디버그 버전을 실행하려고한다는 것입니다. ucrtbased.dll은 ucrtbase 라이브러리의 디버그 버전이며 Visual Studio 배포에서 (내가 아는대로) 사용할 수 있습니다. Visual Studio가 설치되지 않은 컴퓨터에서 응용 프로그램을 실행하려면 응용 프로그램의 릴리스 버전을 사용해야합니다.

+2

정적으로 연결하는 것도 효과가 있습니다. – tkausl

+0

@ tkausl, 당신 말이 맞아요. 그러나, 나는 그것을 보통 사용하지 않는다. 초보자 C++ 프로그래머가이 기능을 사용하는 것을 처리하는 것이 더 어려울 수도 있습니다. 그리고 미리 공유 된 라이브러리 버전 만 제공된다는 사실을 잊지 마십시오. 소스에서 라이브러리를 빌드하는 것이 항상 즐거운 과정은 아닙니다. LGPL 라이센스의 경우 정적 연결을 사용하는 것도 폐쇄 소스 애플리케이션에 까다로운 문제입니다. –

1

문제를 이해하려면 DLL 개념을 이해해야합니다. 동적 링크 라이브러리 (DLL) - Microsoft에서 설명한 바와 같이 : 그래서

A DLL is a library that contains code and data that can be used by more than one program at the same time. For example, in Windows operating systems, the Comdlg32 DLL performs common dialog box related functions. Therefore, each program can use the functionality that is contained in this DLL to implement an Open dialog box. This helps promote code reuse and efficient memory usage.

는 간단히 말해이 DLL은 기본적으로 부하에서 코드에 링크 된 (또는 런되고 컴파일 된 코드의 무리입니다 시각). 이제 시스템에 DLL이 누락 되어도 progrem이 작동하지 않습니다. 일을 더욱 악화시키기 위해 DLL은 사용 된 컴파일러에 민감합니다. 따라서 각 DLL에는 여러 버전이있을 수 있으므로 올바른 DLL이 필요할 것입니다.

이제 문제 자체에 대한 오류 메시지를 시작하는 것이 가장 좋습니다.DLL이 누락 된 부분과 이름이 무엇인지 안내합니다. 예를 들어, 귀하의 경우 "vs * .dll"은 아마도 Visual C++ runtime redistributable과 관련이 있습니다.

마지막으로, 시스템을 작동시키는 데 추가로 고려해야 할 사항이 있습니다. 코드를 사용하는 모든 사람이 똑같은 문제에 직면 할 수 있습니다. 따라서 .EXE를 다른 사람들과 실제로 공유하려는 경우, 사용자를 안내하거나 설치 프로세스를 자동화하는 방법을 이해해야합니다.