2012-01-03 3 views
7

Visual C++ 컴파일러로 컴파일 된 코드가 스트레이트 C++ 인 경우 왜 재배포 가능 패키지가 필요합니까? 이로 인해 코드 플랫폼이 종속적입니까? 재배포 가능 패키지와 함께 Visual C++ 컴파일러를 사용하면 g ++와 함께 다른 IDE를 사용하는 것보다 이점이 있습니까?왜 Visual C++ 재배포 가능 패키지가 필요합니까?

+2

컴파일 된 코드는 * 항상 * 플랫폼에 의존. 컴파일 된 플랫폼에서만 작동합니다. –

+1

필요하지 않습니다. 대신 설치 프로젝트를 만들어야합니다. 또는/MD 대신/MT를 사용하여 컴파일하면 전혀 필요하지 않습니다. 그러나 DLL을 사용할 때 위험합니다. –

답변

6

코드는 플랫폼에 종속되지 않으므로 실행 파일이 대상입니다. 그것은 DLL의 재배포 가능 파일에 포함되어있는 표준 라이브러리 구현을 사용하여 MS 라이브러리와 연결됩니다.

IIRC 모든 항목을 정적으로 링크 할 수있는 옵션이 있어야 재배포 할 필요는 없지만 결과적으로 플랫폼에 따라 달라질 수 있습니다. 예를 들어 UNIX에서 Windows 바이너리를 실행할 수 없습니다 시스템 (와인 없이는 최소한).

+2

메모리 관리 프로그램, 표준 I/O 라이브러리 및 개별 응용 프로그램에 별도의 복사본과 같은 메모리 관리 프로그램을 포함시킬 수 있으며,이를 관리하고 부풀리기를 늘리거나 단일 실행 파일을 설치하지 않아도됩니다. 필요한 모든 응용 프로그램에 대해 한 번만 모든 코드를 포함하는 시간. –

+0

@DavidSchwartz 예 ... 그리고 나는 모든 Windows 설치에서 기본적으로 포함되어 있다고 생각합니다. 맞습니까? – littleadv

+1

Windows 설치 및 실행 시간에 따라 다릅니다. 예를 들어 (아직 다른 사람이 설치 한 경우) Windows Vista SP1을 새로 설치하면 VS2010 런타임이 없습니다. –

5

"Straight C++"와 같은 것은 없습니다. 코드 내에 여기저기서 호출하는 라이브러리 함수가 항상있을 것이고, 매우 조심스럽지 않더라도 컴파일러가 내 보낸 코드만으로 호출해야하는 함수가있을 것입니다. 예를 들어 다음과 같은 루프가있는 경우 :

컴파일러는 단순히 메모리를 복사하는 코드로 바꿉니다. 그리고 속도 대신에 더 작은 크기로 컴파일한다면, 이것은 memmove()와 매우 유사한 함수를 호출 할 것입니다.

또한 직접적인 x86 동등한 명령어가없는 부동 소수점 연산이있을 수 있습니다. 이것들은 함수 호출로 구현 될 것이다. 그리고 그 목록은 계속됩니다.

다른 플랫폼에서는 해당 플랫폼의 컴파일러가 동일한 코드를 컴파일하여 해당 플랫폼의 C++ 런타임과 함께 사용하기 때문에 코드 플랫폼이 종속적 인 것은 아닙니다.

다행히도 C++ 런타임은 응용 프로그램과 별개의 엔터티 일 필요는 없습니다. 컴파일러 및 링커 옵션을 확인하십시오. 당신은 둘 모두를 포함하는 하나의 실행 파일을 생성 할 수 있어야합니다. g ++가 별도의 런타임을 필요로하지 않는다는 것을 알게 되었다면, 그것은 기본적으로 정확하게 수행하기 때문입니다. 사용되는

1

는 C++ 재배포은 IDE에 따라 다릅니다 ("IDE"나는 말을하지만 컴파일러 정말 특정의, 아직 가지를 따라 이동할 때 IDE & 컴파일러가 모두 새 버전을 할당하고있다.)

해당 IDE에만 적용되지만 Windows 운영 체제에는 적용되지 않습니다. 그래서 이전 버전과 호환 될 수 있어야합니다. (분명히 새로운 API를 사용하지 않는다고 가정하십시오.) 사실, 이것은 이전 버전과 호환되므로 (여러분이 생각하는 것처럼 다른 방식으로는 안됩니다.) 이렇게하면 최신 API를 사용할 수 있습니다. 가장 뛰어난 IDE 버전 (10, 11, 12 ...)으로 Win2k에서 코드를 실행하십시오!

이제 각 주 버전에서 다시 컴파일 할 것으로 예상되는 Linux와는 많이 다릅니다. 대부분의 유닉스 시스템은 그런 식으로 작동 할 것이다.

C++을 정적으로 컴파일하여 이러한 재배포 가능 패키지를 피할 수있는 방법을 모르겠습니다. 가능한 경우 .exe를 매우 크게 만들지 만 가능할 수도 있습니다.

0

항상 Visual C++ 6 복사본을 XP 가상 컴퓨터에 설치합니다 (Win 6/7/8에서는 제대로 작동하지 않습니다). 때로는 필자에게 글을 쓰거나, 또는 한 번만 실행하거나 하나의 exe로 컴파일하는 유틸리티 앱을 작성하라는 요청을받는 경우도 있습니다.나는 std lib 만 사용하여 작성된 간단한 프로그램을 다른 누군가에게 보내면 아프다. 일부 누락 된 dll이나 재배포 가능 패키지로 인해 작동하지 않는다고 말해 준다.

관련 문제