如何在 Linux 上编译 QScintilla 和 Eric6?

How do I compile QScintilla and Eric6 on 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

但我得到了:

Checking dependencies

Python Version: 3.4.0

Found PyQt5

Sorry, please install QScintilla2 and its PyQt5/PyQt4 wrapper.

Error: /usr/lib/python3/dist-packages/PyQt5/Qsci.so: undefined symbol: _ZTI13QsciScintilla

主要问题是您链接的是 Qt4 而不是 Qt5。这就是为什么 QAbstractScrollAreaQPrinter headers 被报告为丢失,以及为什么您稍后会收到 undefined symbol 错误。

QScintilla 使用功能文件来控制 compile-time 配置,需要修补其源代码以获得 Qt5 的良好构建。

因此,首先解压缩一组新的源代码,然后进行以下更改:

designer-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

这将确保您获得适用于 Qt5 的独立 qscintilla 库。

完成后,按照以下步骤进行构建(作为普通用户):

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

对我来说不太适用 - 假设我错过了一些东西,或者这是特定于环境的东西。

无论如何....我按照 ekhumoro 的建议做了 除了没有编辑这三个文件: (XXX)

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

编辑它们的理由似乎很合理,但最终 Eric 安装失败:

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 - 理论上应该可以解决,但对我来说没有。我尝试了各种方法都无济于事。可能是我对某些设置的无知。

我希望 ekhumoro 的说明能够工作,因为建议对 3 个文件进行编辑 - 请参阅 (XXX) - 配置 Make 以使用 _qt5 创建库。 我尝试了很多东西 - 符号链接等等,但在一天结束时,遗漏 (XXX) 允许一切正常进行。

所以 - 总之,*如果您不需要让 QScintilla 与 PyQt4 PyQt5* 同时工作,请执行 ekhumoro建议减去 (XXX) 处的内容 - 这样,Eric 应该可以毫无问题地安装。

注意上面的信息:它可能会破坏 Qt4 的 QScintilla 库

我想最重要的是 --pyqt=PyQt5,这导致使用 sip/qscimod5.sip 而不是 sip/qscimod4.sip。不同之处在于它包含 %Import QtWidgets/QtWidgetsmod.sip 行,这对于 QAbstractScrollArea.

是必不可少的