2016-08-30 4 views
7

Есть ли способ скомпилировать C/C++ с Visual Studio 2015 без использования какой-либо библиотеки времени выполнения?Visual Studio 2015: компиляция C/C++ без библиотеки времени выполнения

Мне нужно скомпилировать без библиотеки времени выполнения, потому что я создаю свою собственную библиотеку времени выполнения (для моей ОС).

Есть варианты на C/C++ -> Code Generation-> Runtime Library
, но я хочу вариант, который говорит «none».

Я знаю, что теряю много функций, которые находятся в ЭЛТ.

+2

Последнее, что я слышал, было невозможно скомпилировать ядро ​​ОС с Visual Studio - оно просто не предназначено для него, и многие его части предполагают, что вы работаете на WIndows. – immibis

+2

Связано также: Visual Studio создает исполняемые файлы в формате PE-файла. Какой формат файла работает в вашей ОС? –

+2

Также: начните здесь: http://wiki.osdev.org/Visual_Studio и перейдите непосредственно к «Custom C++ Runtime» –

ответ

7

Для компиляции приложения без С-Runtime Library (CRT) используют /MT, /NODEFAULTLIB опции компоновщика и пересмотреть точку входа в Linker -> Advanced -> Entry Point к функции, определенной в коде, например, rawMain. Подпись:

DWORD CALLBACK rawMain(); 

Без библиотеки C-исполнения вы не можете использовать его функции, как malloc, free, memset и т.д. Вы должны выполнять все функции, используемые CRT сами. Например. вы можете заменить использование malloc на VirtualAlloc() и free на VirtualFree().

Чтобы проверить, что C-время работы не связано с вашим приложением, используйте Dependency Walker.

+0

Подсказка для дальнейшего изучения, реализация основной функции CRT находится в 'VC \ crt \ src \ vcruntime \ exe_common.inl' (VS2015) – Nikita

+0

@SeeSoftware Убедитесь, что' Linker -> Input -> Ignore All Default Libraries' установлен на «Да» и убедитесь, что список «Linker -> Input -> Additional Dependencies» не содержит библиотек CRT. Также убедитесь, что вы не включаете ['C++ Standard Library Header Files'] (https://msdn.microsoft.com/en-us/library/a7tkse1h.aspx), поскольку в этом случае стандартная библиотека C++ будет связана в автоматически. – Nikita

+0

У меня были правильные настройки, но я не хотел менять debug для выпуска – SeeSoftware