Недавно мне удалось собрать статический Qt 5.7.0 с использованием MinGW 5.3.0, который поставляется с динамической версией. Для того, как я это сделал, я следовал инструкциям по ссылке:
https://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW
Никаких ошибок не возникало при создании статических предупреждений Qt (ожидаем (MANY) об устаревших std::auto_ptr
). После установки Qt Version и Kit в Qt Creator, он успешно создал статически связанный исполняемый файл (нет даже CONFIG += static
был необходим).
Но, кажется, что код может быть скомпилирован только с версией MinGW, с которой был собран статический Qt, где это условие не присутствовало в динамической версии, так как я мог компилировать и связывать код Qt как с MinGW 5.3.0, так и с MinGW 6.3. 0. Попытка использовать MinGW 6.3.0 со статическим Qt (построенным с MinGW 5.3.0) приводит к множеству неопределенных ошибок ссылок, таких как:
error: undefined reference to `QApplication::QApplication(int&, char**, int)'
Так что, похоже, ни одна библиотека Qt не связана здесь (qmake
не совместимо или что-то).
Но это не обескуражило меня. Я просто повторил шаги из ссылки снова, но теперь собираю статический Qt с MinGW 6.3.0 (можно установить флаги, чтобы скрипт мог знать, какую версию MinGW использовать).
Это было многообещающе, скрипт собирал Qt около 50 минут, а затем ошибка остановила весь процесс:
// [...millions of console lines...]
cd qtdeclarative\ && ( if not exist Makefile C:\Qt\Static\src\qt-everywhere-opensource-src-5.7.0\qtbase\bin\qmake C:\Qt\
Static\src\qt-everywhere-opensource-src-5.7.0\qtdeclarative\qtdeclarative.pro -o Makefile ) && D:/Programming_Tools/Nuwe
n/MinGW/bin/mingw32-make.exe -f Makefile install
'python' is not recognized as an internal or external command,
operable program or batch file.
Project ERROR: Building QtQml requires Python.
MinGW\bin\mingw32-make.exe: *** [Makefile:338: module-qtdeclarative-install_subtargets] Error 3
MinGW\bin\mingw32-make.exe: Target 'install' not remade because of errors.
Press Enter to continue...:
Самая важная часть здесь, конечно, 'python' is not recognized as an internal or external command
, Теперь это СТРАННЫЙ, потому что у меня установлен python 3.5.2 в переменные среды PATH.
После этого я попытался вызвать python в PowerShell, и вот результат:
PS C:\Users\Ebisu\Downloads> python
python : The term 'python' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ python
+ ~~~~~~
+ CategoryInfo : ObjectNotFound: (python:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Теперь я открыл новый сеанс PowerShell и снова вызвал python. Вот результат:
PS C:\Users\Ebisu\Downloads> python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
PS C:\Users\Ebisu\Downloads>
Теперь мой разум был взорван. Какие? Я попытался запустить скрипт в этой новой сессии снова, но он остановился в том же месте, и СНОВА, питон не распознается после него. Как это возможно? Как Python может стать невидимым во время выполнения скрипта?
Также обратите внимание, мне удалось использовать qmake.exe
которая вышла из этой приостановленной сборки, и она компилирует и связывает код Qt с MinGW 6.3.0, ожидая, что он не может использовать какие-либо модули, такие как QT += multimedia
(не так плохо, как я ожидал, но все же я хотел бы использовать модули).
Просто сталкиваюсь с той же проблемой. Я просто хотел добавить, что в моем случае исправление пути для включения python не помогло, так как $ env: PYTHONPATH все еще указывал на мою установку на python3, а затем скрипт выдавал другую ошибку
((File "Lib/site.py", line 176
file=sys.stderr)
^
SyntaxError: invalid syntax).
Добавление одной из этих строк в сценарий powershell исправляет ошибку:
$env:PYTHONPATH = "$MingwDir\opt\bin"
или же
$env:PYTHONPATH = ""
Других решений пока нет …