Возможно ли развертывать приложение Qt Quick без Qt Network в OS X?
У меня есть приложение Qt Quick, использующее следующие модули
QT = core gui qml quick widgets \
core-private gui-private \
multimedia printsupport`
который я развертываю на OS X. Теперь мой основной двоичный файл, а также множество плагинов Qt Qtick показывают зависимость от Qt Network.
otool -L /path/to/My.app/Contents/MacOS/My
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55471.14.18)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1056.16.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
@executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.4.0, current version 5.4.2)
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
@executable_path/../Frameworks/QtQml.framework/Versions/5/QtQml (compatibility version 5.4.0, current version 5.4.2)
/Users/me/Qt/5.4/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtMultimedia.framework/Versions/5/QtMultimedia (compatibility version 5.4.0, current version 5.4.2)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.17.0)
Та же зависимость от Qt Network находится в следующих плагинах
My.app/Contents/Frameworks/QtMultimedia.framework/Versions/5/QtMultimedia
My.app/Contents/Frameworks/QtMultimediaQuick_p.framework/Versions/5/QtMultimediaQuick_p
My.app/Contents/Frameworks/QtQml.framework/Versions/5/QtQml
My.app/Contents/Frameworks/QtQuick.framework/Versions/5/QtQuick
My.app/Contents/Plugins/audio/libqtaudio_coreaudio.dylib
My.app/Contents/Resources/qml/QtMultimedia/libdeclarative_multimedia.dylib
My.app/Contents/Resources/qml/QtQuick/Controls/libqtquickcontrolsplugin.dylib
My.app/Contents/Resources/qml/QtQuick/Dialogs/libdialogplugin.dylib
My.app/Contents/Resources/qml/QtQuick/Dialogs/Private/libdialogsprivateplugin.dylib
My.app/Contents/Resources/qml/QtQuick/Layouts/libqquicklayoutsplugin.dylib
My.app/Contents/Resources/qml/QtQuick/PrivateWidgets/libwidgetsplugin.dylib
My.app/Contents/Resources/qml/QtQuick/Window.2/libwindowplugin.dylib
My.app/Contents/Resources/qml/QtQuick.2/libqtquick2plugin.dylib
- Можно ли использовать Qt Quick без Qt Network?
- Есть ли какая-либо документация по зависимостям модулей для Qt?
Я не понимаю, почему зависимость в Qt Network скомпилирована в мой собственный двоичный файл.
Ответы
Ответ 1
Нет.
Proof
Следующая командная строка script создает список зависимостей модулей Qt5 в Linux:
# Run in e.g. Qt/5.4/gcc_64/lib
for f in libQt5*.so; do mod=$(basename "$f" .so | cut -c "7-"); echo "$mod"; ldd "$f" | grep "libQt5" | cut -f 1 -d">" | tr -dc "a-zA-Z0-9.[:space:]" | cut -d"." -f 1 | sed 's/libQt5//g'; done
что приводит к следующему результату:
Bluetooth
DBus
Core
CLucene
Core
Concurrent
Core
Core
DBus
Core
Declarative
Widgets
Gui
Script
Sql
XmlPatterns
Network
Core
DesignerComponents
Designer
Widgets
Gui
Xml
Core
Designer
Widgets
Gui
Xml
Core
Gui
Core
Help
Widgets
Gui
Core
Network
Sql
CLucene
Location
Positioning
Quick
Gui
Core
Qml
Network
MultimediaQuick_p
Quick
Multimedia
Gui
Core
Qml
Network
Multimedia
Network
Gui
Core
MultimediaWidgets
Multimedia
Widgets
Gui
Core
OpenGL
Network
Network
Core
Nfc
Core
OpenGL
Widgets
Gui
Core
Positioning
Core
PrintSupport
Widgets
Gui
Core
Qml
Network
Core
QuickParticles
Quick
Gui
Qml
Core
Network
Quick
Gui
Qml
Network
Core
QuickTest
Widgets
Gui
Core
Test
Quick
Qml
Network
QuickWidgets
Quick
Widgets
Gui
Qml
Core
Network
Script
Core
ScriptTools
Core
Widgets
Gui
Script
Sensors
Core
SerialPort
Core
Sql
Core
Svg
Widgets
Gui
Core
Test
Core
WebChannel
Qml
Core
Network
WebKit
Sensors
Core
Positioning
Quick
Gui
Qml
Network
WebChannel
Sql
WebKitWidgets
Widgets
WebKit
Gui
Network
Core
Sensors
PrintSupport
OpenGL
Positioning
Quick
Qml
WebChannel
Sql
WebSockets
Network
Core
Widgets
Gui
Core
X11Extras
Gui
Core
XmlPatterns
Network
Core
Xml
Core
Ответ 2
Ну, QtQml зависит от QtDeclarative, который зависит от QtNetwork, поэтому я сомневаюсь, что вы можете...
И для вас здесь Кросс-зависимости библиотеки Qt
Ответ 3
Я не понимаю, почему зависимость в Qt Network скомпилирована в мой собственный двоичный файл.
Если вы статически связываете свою программу с Qt, итоговый исполняемый файл должен содержать только копию подпрограмм библиотеки, а не всю библиотеку.
Ответ 4
Единственный вариант для вас - реконфигурация и восстановление Qt.
Вы можете настроить доступные функции и избавиться от множества вещей без нарушения лицензии.
Я не делал этого в течение длительного времени, поэтому у меня нет деталей (я потерял ссылку на лучшую инструкцию, если найду ее, я дам вам знать). Надеюсь, что документации выше будет достаточно. Я уверен, что вы сможете найти лучшую инструкцию с Google.