Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Приложение запускается не на всех компах  (Прочитано 9524 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kultura
Помогающий

ru
Offline Offline

« : 24-07-2009 15:15 » 

ms visual c++ 2008, win xp
На компе автора программка запускается, а на других нет.

В приложении использовал дополнительные либы, возможно, они отсутствуют? - К сожалению, пока нету доступа к проблемным компам, не могу проверить.

Поясните, пожалуста, дополнительные либы с длл-ками следует таскать с экзешником или надо делать установочный файл? Если вообще, в этом проблема
Записан
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #1 : 24-07-2009 15:47 » 

Со студией идет утилита, dumpbin насколько я помню называется. Запускаеш ее из под консоли, в качестве параметра задаеш свою прогу. Она тебе покажет все статически присоединяемые библиотеки.  Тебе только останется из них выбрать те, которые как правило не идут в стандартной поставке Windows. Ну и соответственно их также ставить вместе со своей программой. Хотя могут потянутся зависимости. Кстати твоя программа случайно не использует .NET?  Ты свою программу откомпилировал в Release mode?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Kultura
Помогающий

ru
Offline Offline

« Ответ #2 : 24-07-2009 16:45 » 

Finch , жалко утилита эта не запускается, пишет "приложению не удалось запуститься, поскольку mspdb80.dll не был найден..."

Цитата
Кстати твоя программа случайно не использует .NET?  Ты свою программу откомпилировал в Release mode?

Да, наверное, в Release. Правда, особо не разбираюсь какие еще есть режимы компиляции, может и ошибаюсь. Компилировал, тыкая ctrl+f5, да просто f5. Использовать .NET не должна, т.к. я даже не особо знаю, что это такое, разве только использует без моего ведома  Не понял
Записан
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #3 : 24-07-2009 19:01 » 

В основном два режима компиляции. Один Debug - в исполняемый файл встраивается информация, для того, чтоб отладчик мог привязать исполняемый файл к исходному коду. И второй тип, это Release. Вся лишняя информация убирается. Также используется release версии библиотек. В дебаг моде также используется куча библиотек, которые для работы самого приложения в принципе не нужны.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 24-07-2009 20:29 » 

Также по умолчанию линковка runtime-библиотеки идёт в dll-версии (что в debug, что в release). Это тоже может вызвать проблемы. В таком случае, нужно заменить на статическую.
« Последнее редактирование: 24-07-2009 20:31 от Вад » Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #5 : 25-07-2009 05:58 » 

тулза называется depends

открываешь в ней екзешник на своем компе, покажет откуда и какие тянет dll
на "нерабочих" компах покажет какие dll не может найти

можно будет заменить динамическую линковку на статическую или вместе с екзешником переписать dll, на другие компы

есть еще вариант, когда прога использует рантайм линковку, тогда придется все искать вручную
Записан

1n c0de we trust
Kultura
Помогающий

ru
Offline Offline

« Ответ #6 : 25-07-2009 07:21 » 

Finch, спасибо с режимами компиляции немного разобрался. Действительно, было откомпилировано в debug-е. Переделал, правда проверить работоспособность пока еще нет возможности.

Вад
Цитата
Также по умолчанию линковка runtime-библиотеки идёт в dll-версии (что в debug, что в release). Это тоже может вызвать проблемы. В таком случае, нужно заменить на статическую.

Как это делается?

Mayor , утилиту, нашел, экзешник открыл, множество задействованных dll-к узрел. Она показывает и на рабочем компе ненайденные dll-ки! Хотя функции из этих dll-ек вроде не используются. Тот же вопрос: каким образом меняется динамическая линковка на статическую? Ну и, что такое рантайм линковка?  Скромно так...
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #7 : 25-07-2009 07:57 » 

Mayor , утилиту, нашел, экзешник открыл, множество задействованных dll-к узрел. Она показывает и на рабочем компе ненайденные dll-ки! Хотя функции из этих dll-ек вроде не используются. Тот же вопрос: каким образом меняется динамическая линковка на статическую? Ну и, что такое рантайм линковка?  Скромно так...

вывод утилиты покажи на рабочем и тестовом компе

динамическое линкование, меняется на статическое опциями компилятора

рантайм линкование, это когда вручную загружаешь модуль dll в пространство процесса и получаешь адресс процедуры по ее имени
Записан

1n c0de we trust
Kultura
Помогающий

ru
Offline Offline

« Ответ #8 : 25-07-2009 09:57 » 

Mayor , вывод для рабочего компа (обе картинки). Тестовый комп пока недоступен.

Рантайм линкование понял. Его в проге не делал.

* dependency_walker_(1).jpg (110.06 Кб - загружено 823 раз.)
* dependency_walker_(2).jpg (100.93 Кб - загружено 788 раз.)
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #9 : 25-07-2009 14:31 » 

Рантайм линкование понял. Его в проге не делал.

его могли сделать в любой из импортированых тобой библиотек
не понял к чему 2я картинка, но судя по перовй достаточно будет просто скопировать пару msvc* dll в каталог с пакманом на чужом компе и все заработает, откуда копировать посмотришь через депендс

Записан

1n c0de we trust
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 26-07-2009 16:13 » 

Вад
Цитата
Также по умолчанию линковка runtime-библиотеки идёт в dll-версии (что в debug, что в release). Это тоже может вызвать проблемы. В таком случае, нужно заменить на статическую.

Как это делается?
В настройках проекта (C/С++->Code Generation-> поле "Runtime Library").
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines