Учитывая, что C является языком системного программирования, как я могу скомпилировать код C в исходный машинный код x86, который можно было бы вызвать без присутствия операционной системы? (IE: Можно предположить, что у меня есть загрузочный сектор, который загружает исходный машинный код с диска в память, а затем переходит непосредственно к первой команде).Как скомпилировать код C в необработанный двоичный файл без ограничений?
И теперь, для бонусных очков: В идеале, я хотел бы скомпилировать с использованием компилятора Visual Studio 2010, потому что у меня его уже есть. В противном случае, что является лучшим способом выполнить задачу, без необходимости устанавливать множество зависимостей или делать большие изменения в изменении всей системы? Я буду компилировать в Windows 7.
Компилятор фактически не добавляет «специфичный для ОС материал» (вы не должны учитывать системные вызовы DOS, Windows или Linux - те, которые находятся в библиотеках). Загрузчик, на который вы должны сосредоточиться, добавляется компоновщиком. Известная «Вам нужна Windows для запуска этой программы», например, заглушка DOS, может быть легко изменена на другую. (Каждый, кто вырос с Windows, не будет знать, о чем я говорю ...) Итак, проверьте, какие параметры компоновщика у вас есть в Visual Studio. Если нет, скомпилируйте код .obj и используйте внешний компоновщик. – usr2564301