Переносимость программ на C

#c #c

#c #c

Вопрос:

Как мы знаем, java является независимым от платформы языком, благодаря JVM его программа может запускаться на любой ОС. Как насчет C / C ? может ли C / C exe запускаться в любой ОС? Могли бы мы что-нибудь с этим сделать (например, записать после запуска в любом месте)? пожалуйста, развейте мои сомнения по этому поводу. Спасибо

Комментарии:

1. Java не зависит от платформы, она просто изменяет свою платформу. Угадайте, какие языки используются для реализации JVM.

2. .exe — это программа для Windows, и она по-прежнему является .exe, независимо от исходного языка. Кроме того, мне противно, что вы используете «C / C «, как будто они каким-то образом взаимозаменяемые языки.

3. Я думаю, что виртуальные машины, подобные программному обеспечению, реализованы с использованием C / C , подобного системному языку программирования. теперь, пожалуйста, скажите мне, какой язык программирования используется?

4. Вы это поняли! Виртуальная машина Sun / Oracle Java Hotspot использует C для реализации низкоуровневой функциональности и адаптации ее к каждой платформе. Это означает, что программы Java переносимы на многие операционные системы и платформы, потому что кто-то другой сначала перенес некоторый код C для запуска там.

Ответ №1:

Нет — исполняемый файл создается для конкретной операционной системы и аппаратной архитектуры (CPU).

Если вы стараетесь не использовать какие-либо специфические функции операционной системы или какие-либо предположения о размере слова и т.д., то исходный код c можно перекомпилировать для запуска в любом месте.

Ответ №2:

C и C традиционно преобразуются в машинный код для определенного типа / семейства процессоров и упаковываются в формат, который может запускать конкретная операционная система.

Ничто не мешает кому-либо создать компилятор C или Си , который компилирует код для запуска на виртуальной машине в том же смысле, в каком исходный код java компилируется в байтовый код, предназначенный для запуска на jvm. Кто-то

(Однако полезность этого — другой вопрос, и, например, хотя это довольно далеко от стандартного C , C /.CLI компилирует язык, подобный C , для запуска в .NET)

Комментарии:

1. «Компилятор C или Си , который компилирует код для запуска на виртуальной машине» — это, по сути, и есть LLVM, и при определенных усилиях можно использовать байт-код LLVM в качестве переносимого двоичного формата (очевидно, с учетом специфичной для платформы реализации переносимой среды, уже установленной на целевой машине, точно так же, как Java). Я работал над продуктом, который делал это, хотя в отличие от Java код никогда не запускался «на виртуальной машине» с использованием интерпретатора. Представьте, что если бы Java пришлось компилировать с использованием JIT, вы были бы недалеки от базовой модели того, что мы делали как с C, так и С .

Ответ №3:

Теоретически программам на C нужен только компилятор, который создает исполняемые двоичные файлы для целевой платформы. Вот почему C используется практически на любой встроенной платформе.

Практически, для этого требуется отдельная компиляция для каждой целевой платформы.

C — еще один зверь, явно более сложный и богатый возможностями. В зависимости от платформы, у вас может быть или не быть компилятора для C , и если у вас есть, встроенная платформа часто требует (по часто неочевидным, а иногда и критичным причинам), чтобы некоторые функции C были деактивированы.

Таким образом, с C вы все еще «можете» компилироваться для любой целевой платформы, потому что это системный язык программирования, такой как C (это означает, что вы «близки к металлу» с этими языками).

Однако все еще существуют некоторые проблемы, которые вам необходимо решить, если вы хотите настроить таргетинг на некоторые платформы :

  • некоторые конструкторы платформы не позволят вам запускать двоичные файлы на своих платформах, только чтобы подать в суд на их «защищенный» язык на основе виртуальных машин (каким бы он ни был);
  • некоторые конструкторы платформ предоставляют компиляторы для своих платформ, но с ограниченными возможностями, что делает их слишком бедными для использования в промышленной разработке;

Итак, теоретически C и C могут запускаться где угодно, если вы компилируете для целевой программы и используете только кроссплатформенный код / библиотеку. На практике это зависит от контекста.

Ответ №4:

Исполняемые программы зависят от платформы и операционной системы. В некоторых ОС есть эмуляторы, которые позволяют запускать исполняемые файлы других платформ (таких как wine, dosbox и т.д. И, конечно, VMware), Но это только эмуляция / виртуализация.

Ответ №5:

Каждая операционная система имеет свой собственный формат исполняемого файла, поэтому вам придется компилировать свою программу на C ( ) отдельно для каждой ОС. Если вы используете кроссплатформенные библиотеки, вы можете легко перекомпилировать свою программу без необходимости сильно изменять свой код.