Подтвердить что ты не робот

Могут ли программы, написанные на С++, работать в любом месте?

Я знаю, что для запуска С++ в Windows вам нужно скомпилировать специально для Windows, а также для Linux и...

Но, например, если я компилирую программу для Windows, написанную на родном С++, я могу запустить ее на недавно установленном компьютере Windows? Я имею в виду, без загрузки визуальных библиотек времени выполнения С++ и т.д., Я могу просто скомпилировать его, скажем, переустановить окна на моем компьютере и запустить его, не устанавливая ничего другого?

(Вопрос выше, используя Windows в качестве примера, но то же самое можно сделать только для недавно установленного дистрибутива Linux, например Ubuntu) Спасибо заранее.

4b9b3361

Ответ 1

Единственный ответ - "это зависит".

Существует множество способов, которыми ОС может "запускать" программу, много способов создания программы, а также многого кода кода.

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

Но:

  • Статическая привязка стандартных библиотек (которые, скорее всего, присутствуют во всех программах) раздувает использование памяти для многих копий одного и того же кода. То, что библиотека причин часто связана динамически, но для этого требуется также "установка" этих библиотек.

  • Программы, которые используют только стандартные библиотеки, могут выполнять только те вещи, которые как-то "обычны" (или могут быть представлены) во всех системах, теряя при этом всю особенность, отличную от ОС.

  • Есть "платформы", которые по характеру их периферийных устройств не представлены один в другом: в кофемашине есть 12 клавиш и текстовый 2-х рядный 20-секундный дисплей. ПК имеет мышь, клавиатуру и дисплей, который может достигать даже 10 000 пикселей ширины, по одному миллиону цветов. На планшете есть сенсорная поверхность, которая может одновременно захватывать несколько точек. Можете ли вы представить себе, что программа работает на всех этих трех платформах?

Ответ 2

Нет. Часто библиотеки различаются в разных системах. Если ваша программа включает какой-либо графический интерфейс, то у вас определенно будет определенный код ОС, который не будет работать на других ОС.

Если вы пишете программу на С++, нацеленную на компилятор g++ без кода GUI, все еще может быть какой-то конкретный код ОС. Но вы должны иметь возможность переносить его с минимальными усилиями.

Если ваша программа использует только stl и stdio, то она, вероятно, будет переносной. Например, функция MS STL:: c_str() работает немного иначе, чем в linux.

Ответ 3

Для чего стоит при использовании MinGW со статической связью с libc и libС++, очень вероятно, что ваше приложение С++ будет работать в любой системе Windows 95 и более поздних версиях, если только вы не включили функциональность в Windows API, которая не является доступны, как и функции NT. Все мои SDL-приложения, скомпилированные для Windows 7 (скомпилированные в 32-х бит, конечно) отлично работают на моей машине "95".

При развертывании приложения Linux лучше всего предоставить источник плюс конфигурацию script или makefile. Это гарантирует, что у пользователя будут действительные зависимости для вашего приложения. Вы могли бы развернуть двоичные файлы для определенных менеджеров пакетов, если хотите.

Ответ 4

Да, стандартные библиотеки повсюду. Подумайте об этом, большинство ваших программ, которые вы получаете, написаны на C/С++. Только зависимости возникают, когда вы используете некоторые определенные библиотеки, такие как winsock и т.д., Поэтому некоторые приложения Windows вряд ли будут работать на linux и наоборот.