Chr*_*phe 15 macos qt macdeployqt
我有一个问题,因为该版本5.1rc2的QtMac OS X的(5.1也受到影响,而不是5.1rc1)
当我建立我的应用程序,做一个otool -L对二进制文件看到共享库的路径,我得到:(这是只是一个样本,为了清楚起见我删除了一些
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
(compatibility version 45.0.0, current version 1187.37.0)
/Users/chris/**Qt5.1.0//5.1.0**/clang_64/lib/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets
(compatibility version 5.1.0, current version 5.1.0)
/Users/chris/Qt5.1.0//5.1.0/clang_64/lib/QtQuick.framework/Versions/5/QtQuick
(compatibility version 5.1.0, current version 5.1.0)
/Users/chris/Qt5.1.0//5.1.0/clang_64/lib/QtQml.framework/Versions/5/QtQml
(compatibility version 5.1.0, current version 5.1.0)
/Users/chris/Qt5.1.0//5.1.0/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork
(compatibility version 5.1.0, current version 5.1.0)
/Users/chris/Qt5.1.0//5.1.0/clang_64/lib/QtCore.framework/Versions/5/QtCore
(compatibility version 5.1.0, current version 5.1.0)
/Users/chris/Qt5.1.0//5.1.0/clang_64/lib/QtGui.framework/Versions/5/QtGui
(compatibility version 5.1.0, current version 5.1.0)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Qt库的路径中存在双斜杠.当我使用macdeployqt部署我的应用程序时,这些路径不会更改为本地框架(@executable_path /../ Frameworks/...),因为这...我必须使用install_name_tool手动执行,并且它是真烦人
我该怎么做才能解决这个问题?(我已经尝试重新安装Qt,清理,再次运行qmake并重建而无需更改)
mik*_*131 10
有同样的问题.我申请了下一个解决方法:
在我构建程序之后,我将exe内部的链接更改为正确的链接
install_name_tool -change /Users/username/Qt5.1.0//5.1.0/clang_64/lib/QtQuick.framework/Versions/5/QtQuick /Users/username/Qt5.1.0/5.1.0/clang_64/lib/QtQuick.framework/Versions/5/QtQuick <YourExecutable>
Run Code Online (Sandbox Code Playgroud)
在此解决方法之后,macdeployqt已将exe内的所有链接更改为相对的链接.
但我的应用程序破了.问题是我已将所有图像和QML文件添加到资源中.我运行macdeployqt后 - 我无法运行我的应用程序.当我用gdb运行它时 - 我看到下一个错误:
QQmlApplicationEngine failed to load component
qrc:/qml/main.qml:-1 File not found
Error: Your root item has to be a Window.
Run Code Online (Sandbox Code Playgroud)
所以我的所有资源都变得不可用了.有谁知道如何解决这个问题?
我也开始讨论qt论坛
更新,如何部署:
使用此脚本删除动态链接路径中的双斜杠.
./fixqt.sh~/Qt5.1.0/5.1.0/clang_64
从此存储库构建macdeployqt工具.
运行macdeployqt并使用qml源指定dir:
macdeployqt MyApp.app/ -qmldir = ../src/qml -dmg
在这些步骤之后,我设法在不同的OS X系统上运行我的应用程序,而没有安装QT.我已将所有qml文件和图像添加到资源中.在MyApp.app/Content/MacOS/中复制了QtQuick和QtQuick.2模块
希望能帮助到你
我发布这个作为一个解决方案,因为我刚刚在5.3这个过程中失去了(另一天)(我假设它与5.4相同).
macdeployqt现在按预期工作,但这里失败的文档是你需要指定和每个qml目录的绝对路径(相对可能工作,但我根本没有运气).
以下是我为发布过程解决的问题:
在我现在的项目文件中
mac {
CONFIG += x86
CONFIG += c++11
#Disable these for development
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9 #I'm not sure I need this
QMAKE_POST_LINK = {path to macdeployqt}/macdeployqt {appname}.app -qmldir=$$PWD/qml/{appname}/ -verbose=3
}
Run Code Online (Sandbox Code Playgroud)
这有效地称为:
macdeployqt appname.app - /path/to/source/code/appname/qml/appname/ -verbose=3
当指定绝对路径时,它似乎工作正常,但当我使用相对路径时,我遇到了几个问题.PWD是源目录,可执行文件从构建目录运行.构建的绝对路径是OUT_PWD.
在项目的发布配置中保持这一点的美妙之处在于我正常调试(没有应用程序包),并且发布包正在从创建者正确构建.从理论上讲,我可以将它包装成Jenkins构建,并且一劳永逸地完成这个问题.
简答
macdeployqt 如果你正在使用它们,必须扫描你的qml文件,否则导入将被破坏,你会看到如下错误:
QQmlApplicationEngine failed to load component
qrc:/qml/LightAssistant.qml:5 module "QtQuick.Dialogs" is not installed
qrc:/qml/LightAssistant.qml:3 module "QtQuick.Window" is not installed
qrc:/qml/LightAssistant.qml:4 module "QtQuick.Controls" is not installed
qrc:/qml/LightAssistant.qml:1 module "QtQuick" is not installed
qrc:/qml/LightAssistant.qml:2 module "QtQuick.Layouts" is not installed
Run Code Online (Sandbox Code Playgroud)
最后,我的目录结构如下所示:
Project
- qml
- appname
files1.qml
files2.qml
...
filesX.qml
- js
- images
Run Code Online (Sandbox Code Playgroud)
然后将它们打包到资源文件中,根据定义,它不会被复制到构建目录,因此macdeployqt无法扫描它们,除非路径是完美的.通过使用这个构建过程,我在构建(发布)中有一个步骤来处理它,我不需要macdeployqt在我调试时运行.请记住,如果你使用app_bundle,你需要在每个构建上运行macdeployqt,这将真正搞乱你的调试工作流程.
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |