Коллеги,
Столкнулся с проблемой, решения которой на поверхности не обнаружилось.
Создал под 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й сту
Здравствуйте, Алексей Петров, Вы писали:
АП>Коллеги, АП>Столкнулся с проблемой, решения которой на поверхности не обнаружилось.
АП>Создал под 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й
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й сту
Здравствуйте, Алексей Петров, Вы писали:
АП>В чем может быть фокус? АП>Может компилятор ссылку на какой-то ресурс в 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й
Здравствуйте, 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й
> 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 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.