Программирование на VC ++ для запуска за пределами Windows - PullRequest
1 голос
/ 04 мая 2011

У меня был следующий вопрос о программировании в VC ++ 2008

  1. Если я сделаю консольную программу Win32 в Windows 7, будет ли она работать в любой Windows ниже 7?
  2. Могу ли я сделатьПриложение C ++, независимое от .NET Framework?Если да, пожалуйста, сообщите мне, как это сделать.
  3. Могу ли я сделать приложения на VC ++ для запуска в других операционных системах, таких как Linux, при условии, что они могут запускать файлы .exe?Если да, пожалуйста, проинформируйте меня о том, как это сделать.

Я изучаю VC ++ и просто хотел прояснить сомнения.Надеюсь, они скоро будут очищены!

Заранее спасибо и поздравления

Ответы [ 5 ]

3 голосов
/ 04 мая 2011

По большей части ... но имейте в виду следующее:

Если вы хотите программировать без .NET Framework, выберите любой из проектов "Visual C ++" при создании нового проекта - но нене используйте ни один из проектов CLR.

Собственные приложения C ++ (консольные или оконные) будут работать в старых операционных системах Windows, если вы не будете ссылаться на вызовы функций или API, которые доступны только в новых операционных системах.системы.Например, не вызывайте StgMakeUniqueName и ожидайте, что ваше приложение будет работать в Windows XP.Но довольно просто получить консольное приложение C / C ++, скомпилированное на последней версии Visual C ++, работающее на Win7, для создания EXE-файлов, работающих на XP.

Я считаю, что вы можете предотвратить случайное использование новых API с помощьюиспользование определения _WINNT_WIN32.

Другое соображение, связанное с нативными приложениями C ++ в Windows, заключается в том, что по умолчанию Visual C ++ выбирает динамическое связывание для включения C-RunTime (например, msvcrt100.dll).Эти библиотеки DLL не всегда доступны на компьютерах, на которые вы копируете свой EXE.Когда вы запускаете свой EXE на другом компьютере, вы можете получить сообщение об ошибке приложения о невозможности найти MSVCRT * .dll.Если это произойдет, вы можете либо перейти к статическому связыванию в настройках проекта (а затем просто скопировать EXE непосредственно на другие машины), либо предварительно установить соответствующий MSVCRT на другие компьютеры, на которых вы хотите запустить свой EXE.Visual Studio предварительно устанавливает MSVCRT как часть собственной настройки.Visual Studio поставляется с файлами MSI для установки MSVCRT, которые можно распространять.Отладочные сборки вашего EXE-файла могут потребовать ручного копирования отладочной сборки MSVCRT DLL на целевые машины.Выберите статическое связывание для отладочных сборок или просто отладочные сборки вашего приложения с розничной MSVCRT.

То же самое относится и к MFC и связанным с ним DLL, если вы решите использовать эту платформу для разработки пользовательского интерфейса.(Но вы сказали, что консольные приложения, так что вам не нужно об этом беспокоиться).

Ваш EXE не будет работать в Linux без некоторого взлома.(Перекомпилировать проще).Но если вы запрограммируете консольное приложение на .NET, то у EXE высока вероятность запуска в Linux с Mono.

3 голосов
/ 04 мая 2011

1> Зависит: если вы не используете какой-либо специфичный для Windows 7 API, у вас не возникнет проблем с запуском программы в Windows Vista; если вы не используете API для Windows Vista, у вас не возникнет проблем с его запуском в XP и т. д.

2> Конечно, вам просто нужно сделать собственный проект вместо C ++ / CLI

3> Вам понадобится эмулятор типа "wine" для запуска исполняемых файлов Windows под Linux

2 голосов
/ 04 мая 2011
  1. Вероятно, он будет работать нормально, если вы не используете WinAPI, который был представлен в более поздних выпусках Windows. Как правило, если для вас важно обратить внимание на MSDN, он содержит раздел «Минимальные операционные системы».
  2. Уже ответил @AlessandroV, как правило, просто выключите его в настройках проекта. Я думаю, что он выключен по умолчанию (для консольного приложения Win32, то есть)
  3. EXE-файлы могут быть изначально выполнены только в Windows, в linux есть программное обеспечение, которое позволяет выполнять EXE-файлы (Wine), однако производительность ниже, чем при запуске проекта, скомпилированного в нативном режиме для конкретной ОС. Чтобы добиться максимальной производительности и сделать все правильно, проект должен быть скомпилирован с собственным компилятором этой операционной системы. Это будет успешным, если вы используете функции, которые не зависят от ОС (не WinAPI). Если вы будете использовать libc, у вас все будет хорошо. Доступно несколько библиотек с открытым исходным кодом, которые облегчают написание кроссплатформенного кода, и Boost является одной из них.

Удачи.

1 голос
/ 04 мая 2011

Относительно вашего вопроса 2: Когда вы создаете приложение C ++, вам все равно нужно убедиться, что ваша целевая система имеет все библиотеки времени выполнения для приложения.Visual Studios (и даже пакеты служб VS) поставляются с другой версией этих библиотек времени выполнения.Они устанавливаются в параллельном кэше WinSxS .

. При развертывании приложения необходимо добавить VCRedist.exe для библиотек времени выполнения, которые вы использовали при создании приложения.

0 голосов
/ 04 мая 2011

3: если вы пишете переносимое консольное приложение C ++ (без использования специальных функций Windows), вы можете просто перекомпилировать для другой платформы, используя какой-то компилятор, предназначенный для этой платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...