Как скомпилировать QScintilla и Eric6 в Linux?

Сначала я устанавливаю QScintilla, выполнив следующие действия:

1:

cd Qt4Qt5
qmake qscintilla.pro
sudo make
make install

2:

cd ../designer-Qt4Qt5
qmake designer.pro
sudo make
sudo make install

3:

cd ../Python
python3 configure.py --pyqt=PyQt5
sudo make

И вот столкнулся с проблемой:

QAbstractScrollArea: No such file or directory 

и проблема:

qprinter.h: No such file or directory

Но я, наконец, решил их, вручную добавив необходимые файлы.

Продолжается:

sudo make install

4:

затем я перехожу к установке eric6, набрав:

sudo python3 install.py

Но я получил:

Проверка зависимостей

Версия Python: 3.4.0

Найден PyQt5

Извините, пожалуйста, установите QScintilla2 и его оболочку PyQt5/PyQt4.

Ошибка: /usr/lib/python3/dist-packages/PyQt5/Qsci.so: неопределенный символ: _ZTI13QsciScintilla


person Zieng    schedule 09.06.2015    source источник


Ответы (3)


Основная проблема в том, что вы связываетесь с Qt4, а не с Qt5. Вот почему заголовки QAbstractScrollArea и QPrinter сообщаются как отсутствующие, и почему позже вы получаете ошибку undefined symbol.

QScintilla использует файл функций для управления конфигурацией во время компиляции, и его исходные коды должны быть исправлены, чтобы получить хорошую сборку для Qt5.

Итак, сначала распакуйте свежий набор исходников, а затем внесите следующие изменения:

дизайнер-Qt4Qt5/designer.pro:

TARGET = qscintillaplugin_qt5

Qt4Qt5/features/qscintilla2.prf:

        } else {
            LIBS += -lqscintilla2_qt5
        }
    }
} else {
    LIBS += -lqscintilla2_qt5
}

Qt4Qt5/qscintilla.pro:

TARGET = qscintilla2_qt5
...
features.path = $$[QT_INSTALL_ARCHDATA]/mkspecs/features

Это гарантирует, что вы получите независимые библиотеки qscintilla для Qt5.

После этого выполните следующие шаги для сборки (как обычный пользователь):

cd 'path/to/src/Qt4Qt5'

# this is essential for correct linking
export QMAKEFEATURES="$PWD/features"

# make sure you use the right qmake!
qmake-qt5 'qscintilla.pro'
make

# plugin for Qt5 Designer
cd '../designer-Qt4Qt5'
qmake-qt5 'designer.pro' INCLUDEPATH+='../Qt4Qt5' QMAKE_LIBDIR+='../Qt4Qt5'
make

# Python bindings
cd '../Python'
python3 'configure.py' --pyqt='PyQt5' --qmake='/usr/bin/qmake-qt5' \
        --qsci-incdir='../Qt4Qt5' --qsci-libdir='../Qt4Qt5'
make

В случае успеха вы можете установить все (как root):

cd 'path/to/src/Qt4Qt5'
make install

cd '../designer-Qt4Qt5'
make install

cd '../Python'
make install
person ekhumoro    schedule 09.06.2015
comment
Наконец я решил проблему, но после этого возникают новые проблемы. Я устанавливаю Qt5.4.1 в /opt, но с from PyQt5 import QtCore;print(QtCore.QT_VERSION_STR) версия 5.2.1, можете ли вы сказать мне, как заставить python использовать версию в файле /opt? - person Zieng; 10.06.2015
comment
@Зиенг. Смотрите комментарий в моем ответе: убедитесь, что вы используете правильный qmake!. Вам нужно указать полный путь к qmake, установленному под /opt при компиляции. - person ekhumoro; 10.06.2015
comment
Теперь моя проблема в том, что я не могу построить правильный QtSql.so. Я думаю, что это не имеет ничего общего с QScintilla2, потому что, когда я устанавливаю eric6, он сказал, что нашел QScintilla2, и это не имеет ничего общего с версией qmake, потому что, когда я собираю PyQt5 или устанавливаю Qt5, я даже не использовал qmake. Итак, что я собираюсь решить, так это узнать, как построить правильный QtSql.so.@ekhumoro - person Zieng; 11.06.2015
comment
@ekhumoro.Наконец-то я решил все проблемы, удалив всю старую версию и переустановив всю последнюю версию.Большое спасибо! - person Zieng; 11.06.2015

решение ekhumoro выше не совсем сработало для меня - скажем так, может быть, я что-то пропустил или это зависит от среды.

Так или иначе.... Я сделал то, что посоветовал эхуморо, за исключением того, что не редактировал эти три файла: (XXX)

- designer-Qt4Qt5/designer.pro
- Qt4Qt5/features/qscintilla2.prf
- Qt4Qt5/qscintilla.pro

причина их редактирования кажется разумной, но в конце дня установка Эрика не удалась:

Sorry, please install QScintilla2 and its PyQt5/PyQt4 wrapper.
Error:     
dlopen(/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyQt5/Qsci.so, 2):
Library not loaded: libqscintilla2_qt5.12.dylib
                                  ^^^^
Referenced from: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyQt5/Qsci.so
Reason: image not found

обратите внимание на _qt5, помеченный ^^^^ - теоретически это должно разрешиться, но для меня это не так. Я пробовал все виды вещей безрезультатно. Может быть мое незнание каких-то настроек.

Я ожидал, что инструкции эхуморо сработают, так как предложенные правки для 3 файлов - см. (XXX) - настроить Make для создания библиотек с _qt5. Я пробовал много вещей - символические ссылки и т. д., но в конце концов, опустив (XXX), все получилось правильно.

Таким образом, *если вам не нужно, чтобы QScintilla работала одновременно с PyQt4 и PyQt5*, следуйте совету эхуморо за вычетом того, что в (XXX) - таким образом , Эрик должен установиться без проблем.

Осторожнее с приведенной выше информацией: она, вероятно, уничтожит библиотеки QScintilla для Qt4

person user192127    schedule 18.06.2016

Я думаю, что наиболее важным является --pyqt=PyQt5, что приводит к использованию sip/qscimod5.sip вместо sip/qscimod4.sip. Отличие в том, что он содержит строку %Import QtWidgets/QtWidgetsmod.sip, необходимую для QAbstractScrollArea.

person ony    schedule 25.12.2016