Найти - Пользователи
Полная версия: Python 2.7.13 + QtGUI из комплекта Qt 4.8.6/4.8.7 в любых ОС = Segmentation Fault
Начало » GUI » Python 2.7.13 + QtGUI из комплекта Qt 4.8.6/4.8.7 в любых ОС = Segmentation Fault
1 2 3 4
Vady
Доброе время суток всем!
Есть один софт, написанный на python 2.6/2.7 и разработанный сторонними разработчиками. Но доступ к исходнику у меня есть. Работал стабильно на АльтЛинуксе 6.0 СПТ (x64), который работает на python 2.6 и Qt 4.7.4. А также в винде 7 (x32) на python 2.7 и Qt 4.8.4.
Так как АльтЛинукс 6.0 - уже устарел, решил перейти на более современную линуксовую ОС.
Перепробовал Ubuntu 16.10, 17.04, OpenSUSE 42.3, AltLinux 7.0, BaseALT 8.0, CentOS 7, Fedora (не помню), Debian 8. У всех python 2.7, Qt либо 4.8.6, либо 4.8.7. Везде при работе с программой выпадает в Segmentation Fault, причем саму проблему смоделировать не представляется возможным - падение происходит в самых разных случаях и разных местах.
С помощью dbg в нескольких ОС выяснил, что падение происходит вроде в файле libQtGui.so.4.
Кто-нибудь сталкивался с подобной проблемой? Это возможно решить?
Rodegast
Смотри на версию самого PyQt-а.
Vady
Rodegast
Смотри на версию самого PyQt-а.
В АльтЛинуксе 6.0, если правильно понял, в файле pyqtconfig.py нашел строчку pyqt_version_str: 4.7.4
В свежем - 4.11.4
Что-то такую версию, как 4.7.4, не найти на официальном сайте Riverbank… Стоит ли гуглить и вручную пересобирать PyQt? Или не в том направлении следует искать проблему?
Rodegast
Надо смотреть что они там поменяли (насколько помню они избавлялись от некоторых “q-данных” но в каких это было версиях не скажу) и менять исходник соответствующим образом.
Vady
Rodegast
Надо смотреть что они там поменяли (насколько помню они избавлялись от некоторых “q-данных” но в каких это было версиях не скажу) и менять исходник соответствующим образом.
А на версию SIP тоже стоит обратить внимание?
Rodegast
Если не пересобирать PyQt, то это не обязательно.
Vady
Погуглил, узнал следующее: PyQt4 можно использовать вместе с Qt5, т.к. Qt5 имеет обратную совместимость с Qt4, недостаток только в том, что все новые классы, добавленные в Qt5, не будут работать с PyQt4. Но и этого мне достаточно. Интересно посмотреть что из этого выйдет.
Реально ли настроить стандартными линуксовыми средствами типа apt-get/yum/zypper связку PyQt4+Qt5? Гуглем не нашел решение такой задачи. Или это возможно только ручной сборкой?
py.user.next
Vady
Погуглил, узнал следующее: PyQt4 можно использовать вместе с Qt5, т.к. Qt5 имеет обратную совместимость с Qt4
Тебе надо выяснить, откуда у тебя Segfault выходит. Если это из-за ошибки в программе, то обновление библиотек тебе не поможет.

Vady
рейти на более современную линуксовую ОС.
Поставь себе 32-битную версию этой ОС. В битности может быть проблема, у меня было такое недавно, только программа на C. Программа писалась на 32-битной системе и при математических операциях использовала свойства целочисленных типов на 32-битной системе. Когда я перешёл на 64-битную, программа стала виснуть и выпадать. Оказалось (нашёл по юнит-тестам), что проблема в этих типах: они стали 64-битными и побитовые операции стали возвращать другие результаты.

Вот такой код
unsigned long n = 0xFFFFFFFF;
x = ~n;
В зависимости от битности даёт разные результаты.

И вот благодаря юнит-тестам я всё исправил за день, быстро нашёл, быстро исправил, быстро проверил. А вот не было бы юнит-тестов, то вот так искал бы целую неделю баг, как у тебя сейчас происходит.

Поэтому у тебя где-то в программе может быть какая-нибудь такая неявная фигня. Убедись, что дело не в битности.
Vady
Поставь себе 32-битную версию этой ОС. В битности может быть проблема, у меня было такое недавно, только программа на C. Программа писалась на 32-битной системе и при математических операциях использовала свойства целочисленных типов на 32-битной системе. Когда я перешёл на 64-битную, программа стала виснуть и выпадать. Оказалось (нашёл по юнит-тестам), что проблема в этих типах: они стали 64-битными и побитовые операции стали возвращать другие результаты.
Спасибо, попробую. Только вот АльтЛинукс 6.0 у меня установлен как 64-битный и нет проблем… Но на всякий случай попробую на других ОС. Ибо на них установлен питон другой версии, не исключаю, что дело в модулях питона, которые работают в 27, но не в 26 (например, QtWebKit, судя по исходнику), хотя таким функционалом никогда не пользовался… Да и сегфолтится почему-то именно на QtGui, который есть во всех версиях питона…
Vady
Поставил себе BaseALT 8.0 i586, результат отрицательный - тоже сегфолтит… Видимо, дело не в разрядности… Правда, дамп не анализировал…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB