Не запускается native приложение собранное под 2005й студией
От: Алексей Петров Россия  
Дата: 03.07.07 15:50
Оценка:
Коллеги,
Столкнулся с проблемой, решения которой на поверхности не обнаружилось.

Создал под VS2005 консольное приложение на C++ (не managed). Настройки проекта оставил по умолчанию. Собираю — все работает на рабочей станции, где собрал. На ней Microsoft Windows XP [Версия 5.1.2600] и студия 2005 со всеми её потрохами.

А вот на другой машинке (Microsoft Windows [Версия 5.2.3790]) я получаю ошибку при запуске "The system can not execute the specified programm"

Версия винды вроде достаточно близка друг к другу, чтоб стать корнем проблемы. К тому же приложение собранное 2003 студией запускается успешно и там и там. Но, что странно, имеет ощутимо больший размер exe файлаю.


В чем может быть фокус?
Может компилятор ссылку на какой-то ресурс в exe засовывать стал, которого нет на машине и нужно про redestribute'ть?
Re: Не запускается native приложение собранное под 2005й сту
От: Sergey Россия  
Дата: 03.07.07 18:17
Оценка: 6 (1)
Здравствуйте, Алексей Петров, Вы писали:

АП>Коллеги,

АП>Столкнулся с проблемой, решения которой на поверхности не обнаружилось.

АП>Создал под VS2005 консольное приложение на C++ (не managed). Настройки проекта оставил по умолчанию. Собираю — все работает на рабочей станции, где собрал. На ней Microsoft Windows XP [Версия 5.1.2600] и студия 2005 со всеми её потрохами.


АП>А вот на другой машинке (Microsoft Windows [Версия 5.2.3790]) я получаю ошибку при запуске "The system can not execute the specified programm"


АП>Версия винды вроде достаточно близка друг к другу, чтоб стать корнем проблемы. К тому же приложение собранное 2003 студией запускается успешно и там и там. Но, что странно, имеет ощутимо больший размер exe файлаю.



АП>В чем может быть фокус?

АП>Может компилятор ссылку на какой-то ресурс в exe засовывать стал, которого нет на машине и нужно про redestribute'ть?

скорее всего, CRT не установлена. Читать про shared/private assemblies, манифесты и т.п. В двух словах — CRT надо либо линковать статически, либо msvcr80.dll и msvcp80.dll, взятые из каталога redist положить рядом с exe (private assembly), либо устанавливать msvcr80.dll и msvcp80.dll как shared assembly.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Не запускается native приложение собранное под 2005й
От: Алексей Петров Россия  
Дата: 03.07.07 20:11
Оценка:
Здравствуйте, Sergey, Вы писали:


S>скорее всего, CRT не установлена. Читать про shared/private assemblies, манифесты и т.п. В двух словах — CRT надо либо линковать статически, либо msvcr80.dll и msvcp80.dll, взятые из каталога redist положить рядом с exe (private assembly), либо устанавливать msvcr80.dll и msvcp80.dll как shared assembly.


Спасибо. Нашел опцию компилятора /MT которая была by default раньше, а теперь стала /MD — оно и есть
Re: Не запускается native приложение собранное под 2005й сту
От: Vain Россия google.ru
Дата: 03.07.07 20:14
Оценка:
Здравствуйте, Алексей Петров, Вы писали:

АП>В чем может быть фокус?

АП>Может компилятор ссылку на какой-то ресурс в exe засовывать стал, которого нет на машине и нужно про redestribute'ть?
Если бы это была длл, то так и ругалось, что не может подлинковать длл.
У меня была похожая проблема, решилась так:
В настройках проекта в Manifest Tool->Input and Output->Input Resource Manifests добавил $(IntDir)\$(TargetFileName).embed.manifest.res, а в ->Command Line: /updateresource:$(TargetPath).
Но это надо было только для дебага, т.к. для релиза настройки по умолчанию оказалось не нужно менять.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: Не запускается native приложение собранное под 2005й
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 05.07.07 05:51
Оценка:
Здравствуйте, Sergey, Вы писали:

S>скорее всего, CRT не установлена. Читать про shared/private assemblies, манифесты и т.п. В двух словах — CRT надо либо линковать статически, либо msvcr80.dll и msvcp80.dll, взятые из каталога redist положить рядом с exe (private assembly), либо устанавливать msvcr80.dll и msvcp80.dll как shared assembly.


А вот у меня вопрос — именно "msvcr80.dll и msvcp80.dll" или достаточно посмотреть на какую из них ссылается .exe и положить только ее? чем отличаются эти два рантайма?
Re[3]: Не запускается native приложение собранное под 2005й
От: Sergey Россия  
Дата: 05.07.07 08:59
Оценка:
> S>скорее всего, CRT не установлена. Читать про shared/private assemblies, манифесты и т.п. В двух словах — CRT надо либо линковать статически, либо msvcr80.dll и msvcp80.dll, взятые из каталога redist положить рядом с exe (private assembly), либо устанавливать msvcr80.dll и msvcp80.dll как shared assembly.
>
> А вот у меня вопрос — именно "msvcr80.dll и msvcp80.dll" или достаточно посмотреть на какую из них ссылается .exe и положить только ее?

Достаточно заглянуть в манифест exe (редактором ресурсов — той же студией) и посмотреть, что конкретно он хочет. dll'ки, не упомянутые в манифесте, но от которых exe зависит, можно класть по-старому (т.е., лишь бы LoadLibrary их могла найти).

> чем отличаются эти два рантайма?


Грубо говоря, vcr сишный, vcp — плюсовый.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.