2009-12-17 5 views
0

내 프로그램을 msvc * .dll과 연결하지 않으려면 어떤 헤더를 이 아닌으로 사용해야합니까?내 프로그램을 msvc * .dll과 연결하지 않으려면 어떤 헤더를 사용하지 않아야합니까?

는 순간 내 응용 프로그램은 사용

  1. KERNEL32
  2. USER32
  3. shell32를
  4. msvcp90
  5. msvcr90

아래 두 파일을 제거하고 싶습니다. 프로그램의 특정 부분을 다시 작성해야한다면 괜찮습니다.

다음 C 코드와는 어떤 MSVC의

+0

헤더는 링크 대상을 결정하지 않습니다. 호기심이없는 –

+0

왜 그런 식으로하고 싶습니까? 플랫폼 간 문제와 관련이 있습니까? –

+0

나는 매우 가벼운 프로그램을 만들 필요가있다. (나는 C로 할 수 있지만 VC++을 더 좋아한다.) –

답변

1

CRT가 프로그램에 연결되는 방식을 변경해야한다고 생각합니다. 나는 당신이 C++ -> 코드 생성 -> 런타임 라이브러리를 정적 버전으로 변경해야한다고 생각합니다. Visual Studio 2005 용입니다. 최신 버전에 대해서는 알지 못합니다.

+0

2k3, 2k5 및 2k8에서 모두 동일합니다. – sharptooth

+0

102 킬로바이트 O.o는 엄청납니다. 빛을 정적으로 링크 된 프로그램으로 만드는 방법이 있습니까? –

+0

가장 좋은 방법은 링커 설정에서 "진행 메시지"를 켜서 연결 대상과 그 이유를 살펴 보는 것입니다. 그러면 프로그램에서 무엇을 변경해야하는지에 대한 아이디어를 얻을 수 있습니다. – sharptooth

0

그 라이브러리가 C++ 런타임 포함 연결되지 않습니다 링크 만약 내가 알고 있기 때문에 -에서 제거하기 어려운 힙 관리 및 기타 물건을.

"C++ -> 코드 생성 -> 런타임 라이브러리"설정 대신 C++를 정적으로 링크 할 수 있습니다. 그런 다음 해당 .dll 파일이 필요하지 않습니다. 그러나 권장되는 방법은 아닙니다. C++ 런타임에 취약점이 발견되면 프로그램을 다시 컴파일하고 다시 보내야합니다.

0

정적 링크가 정답입니다. 관련 조언은 depends.exe를 사용하여 exe가 종속 DLL에 실제로 어떤 기능을 수행하는지 확인하는 것입니다. 이러한 종속성은 사용자가 명시 적으로 사용하거나 명시 적으로 호출하지 않은 CRT 구현으로 인해 발생할 수 있습니다.

관련 문제