我用Qt 5.1在mac上制作一个简单的Qt应用程序。我使用macdeployqt部署它,但是当我在其他mac上运行它时。
我用我的应用程序运行otool -L,它说
/Users/aratn0n/Qt//5.1.0/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.1.0, current version 5.1.0)
/Users/aratn0n/Qt//5.1.0/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.0)
/Users/aratn0n/Qt//5.1.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.0)
/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/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
它似乎使用我机器上的库,所以当我在其他机器上运行它时,它无法在应用程序包中的Frameworks文件夹中使用Qt库。
我该如何解决?
答案 0 :(得分:1)
如果您打算将qt用作动态库,那么您将需要分发dylib ... 将它用作静态库要简单得多。如果你不共享它,你也没有从共享库中获得太多收益,所以如果你只有一个进程,将qt构建为静态库并将其链接到你的产品,那么就不会有运行时依赖性在外部库上。
答案 1 :(得分:1)
看来macdeployqt还没有完成它的工作。
它应该将所需的Qt库复制到应用程序包中并为您设置路径。
要么调查它失败的原因,要么自己复制文件并使用install_name_tool更新路径
答案 2 :(得分:1)
我目前没有解决方案,但我遇到了运行macdeployqt
时遇到的问题。基于another post,macdeployqt
不改变本地框架路径(@executable_path /../ Frameworks / ...)的原因是Qt库路径中的双斜线。您需要手动运行install_name_tool
以更正双斜杠
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 <EXECUTABLE>
抱歉,我不能再帮忙,但这就是我在Mac OS X上部署我的应用程序。不幸的是,当我删除/重命名我安装的Qt库时,我的应用程序不再有效,因为它无法找到macdeployqt
设置的库。
答案 3 :(得分:1)
正如用户kimbaudi在回答中提到的那样,Qt安装中的一个错误导致macdeployqt
在5.1.0中正常运行。
已在5.1.1中修复。
如果出于某种原因你必须使用5.1.0然后运行macdeployqt
,你会发现Qt框架已被复制到捆绑包中。
然后,您需要cd
到捆绑包中的Frameworks目录,并通过窗体
install_name_tool -change /Users/username/Source/Qt5//5.1.0/clang_64/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui QtCore
您需要为每个Qt框架执行此操作,以重写彼此之间的依赖关系以及PlugIns目录中的所有dylib以及可执行文件。