Название: Перенос с 32ух битной ОС на 64ох Отправлено: ecspertiza от Июнь 15, 2010, 15:38 Есть софтина написанная и собранная под 32ух битной ОС (Windows 7), при переносе на 64ох битную выдает ошибки
Код: Windows 2008 server 64x Первый раз сталкиваюсь с таким переносом, подскажите может нужно собирать софт с какими то ключиками или еще что по колдовать, компилятор 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 где это возможно :)
|