2013-09-28 3 views
0

Visual Studio 2012 (및 이전 버전)은 C 코드를 컴파일 할 수 있습니다. 일반 C, C++가 아닙니다. 런타임 문제를 피하려면 좋은 기능입니다. 나는 평범한 C 바이너리를 컴파일하려고 생각했고 없이MSVCRT 런타임이 없기를 바랬다.MSVCRT 런타임이없는 Visual Studio 2012에서 C 컴파일

/TC (C로 컴파일) 옵션을 추가 한 후 kernel32 및 ntdll과 같은 기본 종속성 만있는 이진 파일을 얻길 바랬습니다. 하지만 그 대신, 이것은 연결되었다 :

enter image description here

우리는 VS 2012 하지 런타임을 사용하고 싶습니다. GCC 컴파일러는 그것을 필요로하지 않으므로 VS에서 "간단한"바이너리를 컴파일하는 방법이 있어야합니다. 우리는 반드시 복잡한 문자열 함수 나 날짜/시간 라이브러리, 단순한 코드 만 필요로하지는 않습니다.

질문 : MSVCRT 런타임 (또는 C++ 코드)없이 Visual Studio 2012에서 C 코드를 컴파일 할 수 있습니까?

편집 : 정적 링크 (/MT)

+0

나는 VS/Windows에 익숙하지 않지만'printf','strcmp','memcpy' 같은 것이 어디에 있을까요? MSVC 런타임은 리눅스에서'libc.so'가하는 것과 비슷합니다. – us2012

+0

왜/MT가 아니겠습니까? 나는 그것이 당신이 실제로 사용하는 것들만 연결한다고 생각하니? 따라서 MSVCRT에서 아무 것도 사용하지 않으면 링크가 없습니다. – user2802841

+0

잘 모르겠습니다 만,'memcpy'는 Windows 컴퓨터보다 분산 된 다른 DLL에서도 사용할 수 있다고 생각합니다. – bytecode77

답변

3

질문에 대한 정답? "는 MSVCRT 런타임없이 비주얼 스튜디오 20XX에서 C 코드를 컴파일 할 수 있습니다 (또는 C++ 코드)가"없는/MT 옵션 (Configuration Properties > C/C++ > Code Generation > Runtime Library=Multi-threaded (/MT))을 사용하는 것입니다. 이렇게하면 원하는대로 모든 MSVCRTxx에 대한 의존성없이 실행 파일이 생성됩니다. 내가 아는 한, 그게 전부입니다. 그것은 당신이하고 싶은 일에 아무런 제약을 두지 않는다. memcpy와 같은 모든 표준 C 라이브러리 함수들은 여전히 ​​작동한다. 유일한 차이점은 .EXE 파일이 약간 더 큰 것입니다. 나는 MSVC6, MSVC2005, MSVC2008 및 MSVC2013을 사용하여 아무 문제없이 수년간 순수 ANSI C 코드에서 작성된 EXE 파일을 만들고 배포 해왔다.

"정적 연결 (/ MT)이없는"한정자와 관련된 질문에 대한 답변에서 볼 수 있듯이.

+0

전혀 사실이 아닙니다. VS2005에서 VS2005로 런타임없이 정적 링크없이 바로 DLL을 컴파일 할 수 있습니다. 주의해야 할 점은 문서화되지 않은 동작에주의를 기울여 관리되지 않는 C++를 피하고 일반 관리되지 않는 C에 집착해야한다는 것입니다. 전역 통계는 초기화되지 않으며 user32 및 kernel32 API 호출을 준수하는 자체 런타임을 만들어야 할 수도 있습니다. 이는 컴파일 할 플랫폼과 다른 런타임으로 컴파일 된 제품에 대한 DLL 플러그인을 만드는 경우 특히 중요합니다. kernel32.dll에만 의존성을 갖는 C++/CLI .NET 플러그인 DLL을 생성하는 것이 가능합니다. – birdwes

관련 문제