我不能在其他mac上运行Qt app

时间:2013-08-11 13:42:42

标签: macos qt

我用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库。

我该如何解决?

4 个答案:

答案 0 :(得分:1)

如果您打算将qt用作动态库,那么您将需要分发dylib ... 将它用作静态库要简单得多。如果你不共享它,你也没有从共享库中获得太多收益,所以如果你只有一个进程,将qt构建为静态库并将其链接到你的产品,那么就不会有运行时依赖性在外部库上。

答案 1 :(得分:1)

看来macdeployqt还没有完成它的工作。

它应该将所需的Qt库复制到应用程序包中并为您设置路径。

要么调查它失败的原因,要么自己复制文件并使用install_name_tool更新路径

答案 2 :(得分:1)

我目前没有解决方案,但我遇到了运行macdeployqt时遇到的问题。基于another postmacdeployqt不改变本地框架路径(@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以及可执行文件。