Russian Qt Forum
Ноябрь 24, 2024, 00:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенос с 32ух битной ОС на 64ох  (Прочитано 5960 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Июнь 15, 2010, 15:38 »

Есть софтина написанная и собранная под 32ух битной ОС (Windows 7), при переносе на 64ох битную выдает ошибки
Код:
Windows 2008 server 64x

Problem signature:
  Problem Event Name: APPCRASH
  Application Name: SMDownloader.exe
  Application Version: 0.0.0.0
  Application Timestamp: 4c1669d4
  Fault Module Name: qgif4.dll
  Fault Module Version: 4.6.1.0
  Fault Module Timestamp: 4c058609
  Exception Code: c0000005
  Exception Offset: 00016000
  OS Version: 6.1.7600.2.0.0.272.7
  Locale ID: 1033
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Read our privacy statement

Первый раз сталкиваюсь с таким переносом, подскажите может нужно собирать софт с какими то ключиками или еще что по колдовать, компилятор MinGW gcc - 4.4.5 .

 
« Последнее редактирование: Июнь 15, 2010, 15:40 от ecspertiza » Записан
niXman
Гость
« Ответ #1 : Июнь 15, 2010, 16:36 »

Цитировать
Exception Code:   c0000005
означает - access violation

стандартная ошибка, проявляющаяся при переносе с 32ух битной на 64ех битную ОС.
причина, как правило, в неправильном результате, при арифметической операции с указателями.
лечится, путем избегания в арифметических операция с указателями, смешанных целочисленных типов - int, unsigned int, unsigned long, size_t.
для индексирования, существует тип ptrdiff_t. для арифметических - size_t, и еще некоторые.

читать тут: http://www.viva64.com/terminology/ptrdiff_t_rus.html
Записан
Wicked_Digger
Гость
« Ответ #2 : Июнь 15, 2010, 16:39 »

Судя по логу приложение получилось не 64-х битным, адреса короткие. Или 32-х битная конкретная либа qgif4.dll
Qt собрана под 64 бита? Вся? И плагины? Подмигивающий
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Июнь 15, 2010, 16:43 »

Сейчас видимо будете смеяться, прога и Qt собранны под 32, потом запущена под 64 битной ОС, причем все либы и плагины были от Qt собранной под 32,  насколько я понимаю нужно делать две версии софта, одну под 32 бита вторую под 64, и стало быть под каждую из них пересобирать Qt и сопутствующие либы?
Записан
niXman
Гость
« Ответ #4 : Июнь 15, 2010, 16:44 »

Wicked_Digger, 32ух битный код обязан работать на 64ех битной платформе.
тут либо троли напортачили(что маловероятно), либо ТС каким-то образом имеет к этому отношение Подмигивающий
Записан
niXman
Гость
« Ответ #5 : Июнь 15, 2010, 16:45 »

Сейчас видимо будете смеяться, прога и Qt собранны под 32, потом запущена под 64 битной ОС, причем все либы и плагины были от Qt собранной под 32,  насколько я понимаю нужно делать две версии софта, одну под 32 бита вторую под 64, и стало быть под каждую из них пересобирать Qt и сопутствующие либы?
нет, нет, и нет.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #6 : Июнь 15, 2010, 16:46 »

либо ТС каким-то образом имеет к этому отношение Подмигивающий

Я запросто мог, буду вечером качать 64 битную ОС, и тестить, постараюсь не сойти с ума Улыбающийся

нет, нет, и нет.

Это радует, если косяки в софтине, то отловить их проще будет.
Записан
Wicked_Digger
Гость
« Ответ #7 : Июнь 15, 2010, 16:51 »

Wicked_Digger, 32ух битный код обязан работать на 64ех битной платформе.
тут либо троли напортачили(что маловероятно), либо ТС каким-то образом имеет к этому отношение Подмигивающий

Я так понял, что приложение портировалось под 64 бита. Если нет, то должно работать без проблем. Возможно стоит использовать Qt 6.X, т.к. в ней есть изменения связанные с Win7. Возможно изменились какие-то системные вызовы.
Записан
sendevent
Гость
« Ответ #8 : Июнь 15, 2010, 17:51 »

<...>Возможно стоит использовать Qt 6.X, т.к. в ней есть<...>
надеюсь, имелось ввиду "4.6.Х", а не "6.Х", а то страшно после выходных видеть подобное - неужто я так много пропустил? =)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июнь 15, 2010, 19:54 »

1) На всех платформах все либы, как статические, так и динамические должны сбиваться - все должно быть либо 32, либо 64. Никак не вызвать 32-битную dll из 64 кода и наоборот. Про ключики не подскажу, т.к. работаю в IDE. Просто создал новый target и выбрал для него архитектуру 64. На Вындоуз (MSVC 2008) - аналогично.

2) "Болезненность" переноса на 64 разная, мне пришлось тяжело с проектом на "С" - эффективный но низкоуровневый код с массой предположений что адрес 4 байта. На Mac платформе плюс еще 1 заморочка - long 8 байт в 64 (но 4 в 32). Пришлось избавиться от всех (unsigned) long.

3) Конечно, все 32-битные выполняются на 64-битном OC. Поэтому если "не горит" и заказчик не рвется использовать больше памяти - то практичнее с переводом повременить. Напр. 4 Gb могут быть совсем не "в 2 раза больше" по сравнению с 2 Gb на 32, т.к. 64-битное приложение может жрать ощутимо больше (зависит от задачи). В смысле скорости 64 ничего не дает. Память приходится экономить и учитывать так же. Ее просто у заказчика может быть намного больше - но это все
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #10 : Июнь 16, 2010, 08:14 »

Вылет был в плагинах imageformats, я просто перед тем как сделать инсталяшку все плагины и dll сжал upx-ом, после того как откатил до нормальной версии плагины, вылетать перестало, ну и на крайний случай прошелся по софтине и заменил int на size_t где это возможно Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 23.