Запуск C Встроенный .exe на другом ПК - PullRequest
3 голосов
/ 15 апреля 2020

Я создал программу в C с Visual Studio, используя стандартные библиотеки C + пару библиотек windows.

Код просто получает пользовательский ввод (с помощью scanf, так что через cmd окно) делает некоторые расчеты на основе ввода и выводит некоторые текстовые файлы, вот и все.

Мне интересно, что мне тогда нужно было бы сделать, чтобы мой exe-файл на другом стандартном компьютере Windows без необходимости для установки каких-либо дополнительных файлов, например, всего Windows SDK .?

Это просто возможность создания версии выпуска (в отличие от отладки)?

Большое спасибо

Ответы [ 3 ]

3 голосов
/ 15 апреля 2020

Если вы выберете правильную цель ЦП ( Свойства конфигурации проекта -> C / C ++ : Включить расширенный набор команд ), так что двоичный код не ' t включает инструкции, понятные только очень узкому подмножеству процессоров, и по умолчанию для Visual Studio используются команды, поддерживаемые самым широким набором процессоров x86 или x64, тогда ваша программа будет работать практически на любом компьютере Windows. Вам необходимо распространять любые библиотеки DLL, которые не являются частью базовой установки Windows, включая любые дополнительные динамически связанные языковые среды выполнения, такие как среда выполнения Visual C ++.

Хороший способ получить список библиотек DLL. то, что вам нужно упаковать в свой исполняемый файл, это создать виртуальную машину с установкой fre sh Windows без каких-либо инструментов разработки, а затем попытаться запустить там свой код. Если вы получили ошибку для отсутствующей DLL, добавьте ее и повторите. Когда дело доходит до среды выполнения Visual C ++, Microsoft предоставляет устанавливаемые пакеты для разных версий, которые вам разрешено распространять в рамках вашей установки (Visual C ++ независимо от распространяемого пакета).

Кроме того, помните, что программы, скомпилированные для 32 -bit Windows будет в основном работать на 64-битных версиях, но обратное неверно.

3 голосов
/ 15 апреля 2020

Вообще говоря, C программы не являются «переносимыми», что означает, что они не могут быть скопированы на другие машины и могут быть запущены.

Есть несколько исключительных случаев, когда C исполняемые файлы могут безопасно запускаться на других машинах:

  1. Процессоры поддерживают один и тот же набор команд, с таким же набором совместимых побочных эффектов и, возможно, одинаковыми ошибками.
  2. Операционные системы поддерживают одинаковые системные API-точки с одинаковым набором совместимых побочных эффектов и, возможно, одинаковыми ошибками.
  3. Установленные библиотеки не операционной системы поддерживают одинаковые API-точки с одинаковым набором совместимых побочных эффектов и, возможно, те же ошибки.
  4. Соглашения о вызовах API одинаковы между источником (платформой, на которой вы создали код) и местом назначения (платформой, на которой вы будете запускать исполняемый файл).

Конечно не все ЦП и ОС должны быть на 100% совместимы, только те части, которые использует ваша скомпилированная программа (что не всегда легко найти) в том виде, как он скомпилирован, а не на 100% идентичное представление исходного кода)

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

Сведения о том, как это проще всего сделать, различаются в разных операционных системах, и, вообще говоря, даже если присутствует уровень совместимости, вам нужно проводить адекватное тестирование, поскольку побочные эффекты и ошибки, как правило, различаются, несмотря на обещания совместимости с несколькими операционными системами.

Наконец, есть некоторые среды, которые могут запускать не одинаковые исполняемые файлы ЦП в операционной системе (например, QEmu), имитируя набор команд внешнего ЦП во время выполнения, объединяя эти инструкции в команды, совместимые с текущим ЦП. Такие системы не распространены среди не Linux операционных систем; и они могут споткнуться, если загрузка динамических c библиотек не может найти и загрузить библиотеки внешних наборов команд.

Со всеми этими предостережениями вы можете понять, почему большинство людей решают написать переносимый исходный код и перекомпилируйте его на каждой целевой платформе; или напишите их код для интерпретатора, который уже существует на нескольких платформах. С подходом интерпретатора, CPU концептуально является виртуальным, который реализован так, чтобы быть идентичным для всего оборудования, что позволяет вам писать один набор исходного кода для интерпретации на всех аппаратных платформах.

0 голосов
/ 15 апреля 2020

Я создал программу в C с Visual Studio, используя стандартные C библиотеки + пару windows библиотек.

Мне интересно, что мне тогда понадобится сделать, чтобы запустить мой exe на другом стандартном компьютере Windows без необходимости установки каких-либо дополнительных файлов, например, всего Windows SDK .?

Вы не объясняете, что ваша программа действительно делает. Имеет ли он графический интерфейс пользователя? Это веб-сервер? У вас есть время, чтобы улучшить или улучшить его? Может ли он работать в командной строке?

Почему вы не можете поделиться исходным кодом C (например, используя github )?

Если вам нужен графический интерфейс, подумайте используя GTK . Он был портирован на Windows.

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

Но то, что вам нужно понять, в основном связано с связыванием , а не только с языком программирования C (см. спецификацию n1570 ) , Поэтому читайте о компоновщиках и загрузчиках .

Вы должны предпочесть stati c библиотеки . Их доступность зависит от платформы * 1088 Удельный *. Подробнее о Операционные системы . Кроме того, совместное использование некоторых Microsoft Windows system WinAPI библиотек может быть незаконным (даже если это технически возможно), поэтому проконсультируйтесь со своим юристом после показа ему EULA , что вы

Мое мнение таково, что Linux дистрибутивы очень удобны при обучении программированию в C (например, используя G CC или Clang как ваш C компилятор). Обе Ubuntu и Debian можно загрузить бесплатно, но практически для них требуется около ста гигабайт свободного места на диске. Обязательно сделайте резервную копию важных данных перед установкой одного из них.

Рассматривали ли вы перенос , адаптацию и компиляцию кода C для WebAssembly ? Если вы это сделаете, ваш код будет работать в самых последних веб-браузерах. Смотрите также Беллард JSLinux.

Соответствующий ответ здесь . Обратите внимание, что C можно перенести в JavaScript, а затем запустить локально в последних веб-браузерах.

...