我在Mac的Qt版本5.1rc2上遇到了问题。(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)如您所见,Qt库的路径中有一个双斜杠。当我使用macdeployqt部署我的应用程序时,这些路径不会更改为本地框架(@executable_path/../ frameworks /...),因此...我不得不用install_name_tool手动操作,这真的很烦人。
我能做些什么来解决这个问题呢?(我已经尝试了重新安装Qt,清理,再次运行qmake,不做任何更改就重新构建)
发布于 2013-07-11 19:10:43
有同样的问题。我应用了下一个变通方法:
在我构建我的程序之后,我已经将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>在此解决方法之后,macdeployqt已将exe中的所有链接更改为相对链接。
但是我的App坏了。问题是,我已经将我所有的图像和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.因此,不知何故,我所有的资源都变得不可用。有谁知道怎么解决这个问题吗?
我还在qt forum上发起了一个讨论
更新,如何部署:
./fixqt.sh从该repository.
macdeployqt MyApp.app/ -qmldir=../src/qml -dmg
在这些步骤之后,我设法在不同的OS X系统上运行我的应用程序,而没有安装QT。我已经将我所有的qml文件和图片添加到资源中。QtQuick和QtQuick.2模块在MyApp.app/Content/MacOS/中复制
希望能有所帮助
发布于 2015-01-30 01:57:50
我将这篇文章作为一个解决方案发布,因为我刚刚在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
}这实际上调用了:macdeployqt appname.app - /path/to/source/code/appname/qml/appname/ -verbose=3
当指定了绝对路径时,它看起来工作得很好,但是当我使用相对路径时,我遇到了几个问题。PWD是源目录,可执行文件从build目录运行。构建的绝对路径是OUT_PWD。
将其保存在项目的发布配置中的美妙之处在于,我可以正常调试(没有应用程序包),并且发布包可以正确地从creator构建。从理论上讲,我可以将其封装到Jenkins构建中,并一劳永逸地解决这个令人头疼的问题。
The Short Answer
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最后,我的目录结构如下所示:
Project
- qml
- appname
files1.qml
files2.qml
...
filesX.qml
- js
- images然后,这些文件被打包到Resource文件中,根据定义,该文件不会复制到build目录,因此macdeployqt无法扫描它们,除非路径是完美的。通过使用此构建过程,我在构建(发行版)中有了一个处理它的步骤,并且我在调试时不必运行macdeployqt。请记住,如果您使用app_bundle,则需要在每个构建上运行macdeployqt,这将真正扰乱您的调试工作流程。
发布于 2013-07-11 22:44:37
此线程:
http://www.qtcentre.org/threads/55277-Qt-5-1-and-Mac-Bug-making-macdeployqt-not-working-properly
包含此链接:
https://gist.github.com/lasconic/5965542
lasconic写的这个脚本(不是我的作品):
BIN_FILE=YOURBINARY
for P in `otool -L $BIN_FILE | awk '{print $1}'`
do
if [[ "$P" == *//* ]]
then
PSLASH=$(echo $P | sed 's,//,/,g')
install_name_tool -change $P $PSLASH $BIN_FILE
fi
done
QTDIR=$1
for F in `find $QTDIR/lib $QTDIR/plugins $QTDIR/qml -perm 755 -type f`
do
for P in `otool -L $F | awk '{print $1}'`
do
if [[ "$P" == *//* ]]
then
PSLASH=$(echo $P | sed 's,//,/,g')
install_name_tool -change $P $PSLASH $F
fi
done
done您只需将YOURBINARY替换为例如myapp.app/Contents/MacOS/myapp
和带有QTDIR=/Users/MyName/Qt5.1.0/5.1.0/clang_64的QTDIR=$1
将文件保存在与myapp.app相同的目录中
并使用以下命令运行
sh thankslasconic.sh然后你就可以运行
macdeployqt myapp.app它应该是有效的。对我来说是这样的。这就是我把它贴在这里的原因。
https://stackoverflow.com/questions/17475788
复制相似问题