Visual Studio Express 2005를 사용하여 완전히 정적으로 연결된 .exe를 만들려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/37398

  •  09-06-2019
  •  | 
  •  

문제

현재 내가 선호하는 C++ 환경은 무료이며 대체로 뛰어난 Microsoft Visual Studio 2005 Express Edition입니다.때때로 나는 릴리스 .exe 파일을 다른 사람들에게 보내서 만족스러운 결과를 얻었습니다.그러나 최근에 나는 기분 좋은 결과가 내가 원하는 더 많은 행운에 기초하고 있다는 충격적인 발견을 했습니다.오래된(꼼꼼하게 업데이트되지 않은 2001년 빈티지) XP 상자에서 이러한 프로그램 중 하나를 실행하려고 하면 불쾌한 "시스템에서 x.exe를 실행할 수 없습니다."(또는 이와 유사한) 메시지만 표시되었습니다.

일부 인터넷 검색에 따르면 이 도구 세트를 사용하면 정적 링크를 지정해도 실제로 추가 .dll 파일(msvcm80.dll 등)에 의존하는 간단한 hello-world.exe가 생성되는 것으로 나타났습니다.엄청나게 정교한 버전 계획 시스템(매니페스트 파일이 누구입니까?)은 정확히 올바른 .dll 버전이 없으면 .exe가 실행되도록 허용하지 않습니다.나는 이 항목을 원하거나 필요로 하지 않습니다. 단지 가장 낮은 공통 분모인 Win32 작업만 수행하고 기존 win32 OS에서 실행되는 구식 자체 포함 .exe를 원할 뿐입니다.

기존 도구 세트로 내가 원하는 작업을 수행할 수 있는지 아는 사람이 있습니까?

감사합니다.

도움이 되었습니까?

해결책

C 런타임의 경우 프로젝트 설정으로 이동하여 C/C++를 선택한 다음 '코드 생성'을 선택합니다.'런타임 라이브러리' 설정을 '멀티스레드 dll' 대신 '멀티스레드'로 변경하세요.

다른 라이브러리를 사용하는 경우 동적으로 링크된 CRT를 명시적으로 무시하도록 링커에 지시해야 할 수도 있습니다.

다른 팁

Visual Studio 2010에서 경험한 바에 따르면 DLL이 필요하지 않도록 하려면 두 가지 변경이 필요했습니다.프로젝트 속성 페이지에서(솔루션 탐색기 창에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭):

  1. 구성 속성 -> 일반에서 "MFC 사용" 필드를 "정적 라이브러리에서 MFC 사용"으로 변경합니다.

  2. 구성 속성 --> C/C++ --> 코드 생성에서 "런타임 라이브러리" 필드를 "멀티 스레드(/MT)"로 변경합니다.

왜 둘 다 필요한지 잘 모르겠습니다.나는 이것을 glu32.dll에 대한 종속성을 제거하는 데 사용했습니다.

나중에 추가됨:구성을 변경할 때는 "모든 구성"으로 변경해야 합니다. 속성 창 상단에서 이를 선택할 수 있습니다.디버그 구성만 변경하면 릴리스 구성에는 적용되지 않으며 그 반대의 경우도 마찬가지입니다.

나는 이와 동일한 종속성 문제를 겪었고 VS 8.0 DLL(릴리스에만 해당!)을 포함할 수 있다는 것도 알고 있습니다.디버그하지 마세요!---그리고 프로그램도 .exe가 있는 상위 폴더의 적절한 이름의 폴더에 릴리스되어야 합니다.

어떻게:XCopy(MSDN)를 사용하여 배포

또한 올바른 libXXX.lib를 무시한 다음 동적으로 링크(DLL)해야만 해결할 수 있는 링커 충돌이 발생하므로 동일한 정적으로 링크된 .exe에 C++ 및 C 코드가 있어야 하는 경우 문제가 발생할 수 있습니다. .

마지막으로, Windows 2000 이상에는 올바른 DLL이 설치되어 있으므로 다른 도구 세트(VC++ 6.0)를 사용하면 "그냥 작동"합니다.

Jared의 답변에 따르면 Windows 2000 이상이 있다고 해서 문제가 반드시 해결되는 것은 아닙니다.Rob의 답변은 효과가 있지만 Windows 업데이트가 이와 같이 구축된 응용 프로그램을 패치할 수 없기 때문에 이 수정으로 인해 보안 문제가 발생할 가능성이 있습니다.

다른 게시물에서 Nick Guerrera는 빠르게 설치되고 Visual Studio와 독립적인 Visual C++ 런타임 재배포 가능 패키지를 애플리케이션과 함께 패키징할 것을 제안했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top