Russian Qt Forum

Qt => Общие вопросы => Тема начата: ecspertiza от Июнь 15, 2010, 15:38



Название: Перенос с 32ух битной ОС на 64ох
Отправлено: ecspertiza от Июнь 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 .

 


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: niXman от Июнь 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


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: Wicked_Digger от Июнь 15, 2010, 16:39
Судя по логу приложение получилось не 64-х битным, адреса короткие. Или 32-х битная конкретная либа qgif4.dll
Qt собрана под 64 бита? Вся? И плагины? ;)


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: ecspertiza от Июнь 15, 2010, 16:43
Сейчас видимо будете смеяться, прога и Qt собранны под 32, потом запущена под 64 битной ОС, причем все либы и плагины были от Qt собранной под 32,  насколько я понимаю нужно делать две версии софта, одну под 32 бита вторую под 64, и стало быть под каждую из них пересобирать Qt и сопутствующие либы?


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: niXman от Июнь 15, 2010, 16:44
Wicked_Digger, 32ух битный код обязан работать на 64ех битной платформе.
тут либо троли напортачили(что маловероятно), либо ТС каким-то образом имеет к этому отношение ;)


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: niXman от Июнь 15, 2010, 16:45
Сейчас видимо будете смеяться, прога и Qt собранны под 32, потом запущена под 64 битной ОС, причем все либы и плагины были от Qt собранной под 32,  насколько я понимаю нужно делать две версии софта, одну под 32 бита вторую под 64, и стало быть под каждую из них пересобирать Qt и сопутствующие либы?
нет, нет, и нет.


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: ecspertiza от Июнь 15, 2010, 16:46
либо ТС каким-то образом имеет к этому отношение ;)

Я запросто мог, буду вечером качать 64 битную ОС, и тестить, постараюсь не сойти с ума :)

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

Это радует, если косяки в софтине, то отловить их проще будет.


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: Wicked_Digger от Июнь 15, 2010, 16:51
Wicked_Digger, 32ух битный код обязан работать на 64ех битной платформе.
тут либо троли напортачили(что маловероятно), либо ТС каким-то образом имеет к этому отношение ;)

Я так понял, что приложение портировалось под 64 бита. Если нет, то должно работать без проблем. Возможно стоит использовать Qt 6.X, т.к. в ней есть изменения связанные с Win7. Возможно изменились какие-то системные вызовы.


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: sendevent от Июнь 15, 2010, 17:51
<...>Возможно стоит использовать Qt 6.X, т.к. в ней есть<...>
надеюсь, имелось ввиду "4.6.Х", а не "6.Х", а то страшно после выходных видеть подобное - неужто я так много пропустил? =)


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: Igors от Июнь 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 ничего не дает. Память приходится экономить и учитывать так же. Ее просто у заказчика может быть намного больше - но это все


Название: Re: Перенос с 32ух битной ОС на 64ох
Отправлено: ecspertiza от Июнь 16, 2010, 08:14
Вылет был в плагинах imageformats, я просто перед тем как сделать инсталяшку все плагины и dll сжал upx-ом, после того как откатил до нормальной версии плагины, вылетать перестало, ну и на крайний случай прошелся по софтине и заменил int на size_t где это возможно :)