我有Qt和PyQt的商业许可证,并试图构建所有必需软件的静态版本,以生成一个独立的、可执行的程序,我目前正在使用Python3和PyQt编写这些程序。我计划使用VirtualBox进行本机构建,可能会针对Linux和Windows。我正在尝试设置Linux构建环境。在
完成此操作的第一步是构建一个系统根目录,如下所述:http://pyqt.sourceforge.net/Docs/pyqtdeploy/build_sysroot.html
我正在使用build-系统根.py,此处显示:https://www.riverbankcomputing.com/hg/pyqtdeploy/file/tip/Developers/build-sysroot.py
按照第一个链接中的说明,我创建了一个根目录(sysroot-linux),其中包含一个名为src的目录,其中包含Qt5、PyQt5、sip、PyQtChart和Python的g-zipped源代码文件夹。在
我在VBox中使用的是Xubuntu 16.0464位,以及商业PyQt-5.8、商业PyQtChart-5.8、Python-3.6.1、商业Qt-5.8.0和sip-4.19.2。我将Qt许可证信息复制到位于/home/(user)/.Qt license的文件中。我将PyQt许可证文件复制到g-zipped PyQt/sip目录中。在
当我在终端中运行以下命令时:
python3 build-sysroot.py --build qt python sip pyqt5 pyqtchart --sysroot /home/(user)/(path-to)/sysroot-linux
其中(user)是用户名,(path to)是系统根目录的路径。在
大约1.5小时后,我在PyQt构建期间得到一个错误
^{pr2}$销售PyQt的公司建议我构建的Qt不支持SSL,但PyQt配置文件启用了SSL。在
所以我尝试在PyQt配置中使用build中的“disable=QtNetwork”禁用QtNetwork-系统根.py,函数“build_pyqt5”在“args”(python列表类型;请参阅第1个链接的第721行)中,但没有用-该选项似乎已被忽略,无论如何都尝试构建QtNetwork。在
我与销售PyQt的公司有联系,但我想联系更广泛的编程社区,看看过去是否有人成功地做到了这一点,或许可以提供一些见解。任何帮助都是非常感谢的。在
谢谢你, 克里斯
编辑1 以下是完整的错误输出,仅修改了目录路径:
make[1]: Entering directory '/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork'
g++ -c -pipe -O2 -fPIC -std=gnu++11 -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -W -D_REENTRANT -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I. -I../../../include/python3.6 -I../../../Qt/include -I../../../Qt/include/QtNetwork -I../../../Qt/include/QtCore -I. -I../../../Qt/mkspecs/linux-g++ -o sipQtNetworkpart1.o sipQtNetworkpart1.cpp
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp: In function ‘PyObject* meth_QNetworkReply_sslConfiguration(PyObject*, PyObject*)’:
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp:1094:55: error: ‘const class QNetworkReply’ has no member named ‘sslConfiguration’
sipRes = new ::QSslConfiguration(sipCpp->sslConfiguration());
^
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp:1094:73: error: invalid use of incomplete type ‘class QSslConfiguration’
sipRes = new ::QSslConfiguration(sipCpp->sslConfiguration());
^
In file included from ../../../Qt/include/QtNetwork/QNetworkRequest:1:0,
from ../../../Qt/include/QtNetwork/qnetworkreply.h:48,
from /home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/sip/QtNetwork/qnetworkreply.sip:18:
../../../Qt/include/QtNetwork/qnetworkrequest.h:52:7: note: forward declaration of ‘class QSslConfiguration’
class QSslConfiguration;
^
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp: In function ‘PyObject* meth_QNetworkReply_setSslConfiguration(PyObject*, PyObject*)’:
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp:1120:21: error: ‘class QNetworkReply’ has no member named ‘setSslConfiguration’
sipCpp->setSslConfiguration(*a0);
^
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp: In function ‘PyObject* meth_QNetworkReply_ignoreSslErrors(PyObject*, PyObject*)’:
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp:1162:40: error: no matching function for call to ‘QNetworkReply::ignoreSslErrors(const QList<QSslError>&)’
sipCpp->ignoreSslErrors(*a0);
^
In file included from /home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/sip/QtNetwork/qnetworkreply.sip:18:0:
../../../Qt/include/QtNetwork/qnetworkreply.h:154:18: note: candidate: virtual void QNetworkReply::ignoreSslErrors()
virtual void ignoreSslErrors();
^
../../../Qt/include/QtNetwork/qnetworkreply.h:154:18: note: candidate expects 0 arguments, 1 provided
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp: In function ‘PyObject* meth_QNetworkAccessManager_connectToHostEncrypted(PyObject*, PyObject*, PyObject*)’:
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp:12735:45: error: incomplete type ‘QSslConfiguration’ used in nested name specifier
{sipName_PutOperation, static_cast<int>( ::QNetworkAccessManager::PutOperation), 55},
^
/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork/sipQtNetworkpart1.cpp:12747:21: error: ‘class QNetworkAccessManager’ has no member named ‘connectToHostEncrypted’
{"encrypted(QNetworkReply*)", "\1encrypted(self, QNetworkReply)", 0, 0},
^
Makefile:953: recipe for target 'sipQtNetworkpart1.o' failed
make[1]: *** [sipQtNetworkpart1.o] Error 1
make[1]: Leaving directory '/home/(user)/(path-to)/sysroot-linux/build/PyQt5_commercial-5.8/QtNetwork'
Makefile:414: recipe for target 'sub-QtNetwork-make_first-ordered' failed
make: *** [sub-QtNetwork-make_first-ordered] Error 2
Traceback (most recent call last):
File "build-sysroot.py", line 1073, in <module>
build_pyqt5(host, target, args.all, args.debug)
File "build-sysroot.py", line 735, in build_pyqt5
host.run(host.make)
File "build-sysroot.py", line 313, in run
subprocess.check_call(args)
File "/usr/lib/python3.5/subprocess.py", line 581, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('make',)' returned non-zero exit status 2
我会继续分享我的解决方法,以防其他人遇到这个问题。在
当前,构建-系统根.py该脚本使用pyqtdeploycli生成用于构建PyQt的配置文件,其中包括无法静态构建的Qt模块,例如QtWebEngine。无论如何,我最终为PyQt5创建了一个配置文件,并将其放在PyQt5源文件的顶部g-zipped文件夹中:
PyQt5配置文件(PyQt5-linux-64.cfg):
^{pr2}$然后我修改了构建-系统根.py构建_pyqt5函数以不再调用pyqtdeploycli,而只使用手动创建的配置文件,如下所示:
我只在QtCore、QtGui和qtwidgest上实现了这个功能,但其他的功能也可能实现。在
相关问题 更多 >
编程相关推荐