Приложение C ++, скомпилированное с VS2008, не запускается на другом компьютере - PullRequest
3 голосов
/ 10 апреля 2009

Я создал проект wn32 с Visual Studio 2008 и Visual C ++ , он использует библиотеку ws2_32.lib, а затем скомпилирован в Режим выпуска,

Он отлично работает на том же компьютере, но когда я копирую исполняемый файл на другой компьютер (на котором не установлена ​​Visual Studio), он не запускается.

Сообщение, которое я вижу:

Это приложение не удалось запустить из-за неправильной конфигурации приложения. Переустановка приложения может решить эту проблему.

Но если я скомпилирую свое приложение, используя DEV C ++ , оно создаст больший исполняемый файл (738 КБ) по сравнению с исполняемым файлом Visual Studio 2008 (9,5 КБ). Однако исполняемый файл DEV C ++ работает на другом компьютере.

Я добавил библиотеку ws2_32.lib в свойства компоновщика моего проекта в поле Дополнительные зависимости .

Как я могу это исправить для работы с Visual Studio 2008?

Мой код следующий: http://www.stan.com.mx/yupi/udpserver.cpp

Ответы [ 4 ]

11 голосов
/ 10 апреля 2009

Проблема почти наверняка в том, что на другом компьютере не установлена ​​версия 9 CRT C ++.

Настройка по умолчанию для компиляции с CRT в VS2008 - это динамическое и статическое соединение. Если вы хотите развернуть свою программу с реальным проектом установки, вам необходимо включить распространяемый CRT.

Однако, если вы хотите выполнить развертывание XCOPY, следуйте инструкциям на следующей странице.

http://msdn.microsoft.com/en-us/library/ms235291.aspx

4 голосов
/ 10 апреля 2009

Попробуйте установить распространяемые файлы Visual C ++ . Если это не сработает, используйте DependencyWalker , чтобы узнать, какие библиотеки отсутствуют.

1 голос
/ 13 апреля 2009

Я согласен с JaredPar. Приложение, которое вы создаете с помощью VS2008, использует динамическое связывание, тогда как DEV C ++ связывает статически, следовательно, имеет больший размер и почему одно работает, а другое нет.

Однако, если у вас есть простой проект приложения win32 (и вы не хотите / не должны распространять его с настройкой), вы можете иметь возможность запустить его на другом машина без перераспределения CRT, заставляя VS2008 статически связывать для вас (если это просто стандартная библиотека, которую вам не хватает). У меня нет под рукой копии VS2008, поэтому я опишу, как это сделать в VS2005, и, надеюсь, она будет переведена.

  1. Вывести свойства конфигурации для проекта (щелкните правой кнопкой мыши имя проекта, затем выберите «Свойства» в меню)
  2. Разверните «Свойства конфигурации», затем «C / C ++», затем нажмите «Генерация кода»
  3. В разделе "Runtime Library" для вашей конкретной конфигурации выберите версию библиотеки non-DLL , т.е. для отладочных сборок, которые вы хотите "Многопоточная отладка (/ MTd), и для сборок выпуска вы хочу "Многопоточный (/ MT)"

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

1 голос
/ 10 апреля 2009

Возможно, вам не хватает внешней зависимости, требуемой вашей программой. Проверьте настройки проекта, чтобы увидеть, например, если вы динамически связываетесь с MFC. Вы также можете запустить утилиту Depends для проверки отсутствующих зависимостей.

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