2016-08-30 2 views
7

런타임 라이브러리를 사용하지 않고 Visual Studio 2015에서 C/C++를 컴파일하는 방법이 있습니까?Visual Studio 2015 : 런타임 라이브러리없이 C/C++ 컴파일

(내 OS 용) 자체 런타임 라이브러리를 생성하기 때문에 런타임 라이브러리없이 컴파일해야합니다.

C/C++ -> 코드 생성 -> 런타임 라이브러리
에는 옵션이 있지만 "없음"이라는 옵션이 필요합니다.

저는 CRT에있는 많은 기능을 잃어 버렸음을 알고 있습니다.

+2

마지막으로 Visual Studio로 OS 커널을 컴파일 할 수 없다는 말을 들었습니다. 단순히 비주얼 베이직을 위해 설계된 것이 아니며, 많은 부분이 당신이 Windows에서 실행된다고 가정합니다. – immibis

+2

관련 항목 : Visual Studio는 PE 파일 형식의 실행 파일을 생성합니다. OS가 실행하는 파일 형식은 무엇입니까? –

+2

또한 여기에서 시작하십시오 : http://wiki.osdev.org/Visual_Studio 직접 "Custom C++ Runtime"으로 진행하십시오. –

답변

7

는 코드, 예를 들어,에 정의 된 함수에 C-런타임 라이브러리 (CRT) /MT, /NODEFAULTLIB 링커 옵션을 사용 Linker -> Advanced -> Entry Point에서 진입 점을 재정의하지 않고 응용 프로그램을 컴파일하려면 rawMain. 서명은 다음과 같습니다 당신이 그것을 사용할 수 없습니다 C-런타임 라이브러리없이

DWORD CALLBACK rawMain(); 

당신은 자신에 의해 사용 된 모든 CRT 기능을 구현한다 등 malloc, free, memset, 같은 기능입니다. 예 : malloc의 사용을 VirtualAlloc()free에 의해 VirtualFree()으로 바꿀 수 있습니다.

C 런타임이 응용 프로그램에 연결되어 있지 않은지 확인하려면 Dependency Walker을 사용하십시오.

+0

더 많은 조사를 위해 힌트가 필요합니다. 메인 함수의 CRT 구현은'VC \ crt \ src \ vcruntime \ exe_common.inl' (VS2015) – Nikita

+0

@SeeSoftware에 있습니다. 링커 -> 입력 -> 모든 기본 라이브러리 무시가 설정되어 있는지 확인하십시오 를 선택하고'Linker -> Input -> Additional Dependencies'리스트에 CRT 라이브러리가 없다는 것을 확인하십시오. 이 경우에는 표준 C++ 라이브러리가 다음과 같이 링크되기 때문에 [C++ 표준 라이브러리 헤더 파일] (https://msdn.microsoft.com/en-us/library/a7tkse1h.aspx)을 포함하지 않도록하십시오. 자동으로 – Nikita

+0

나는 올바른 설정을 가지고 있었지만 디버그를 해제하려고하지 않았다. – SeeSoftware