2

I make a simple Qt app on mac with Qt 5.1. I deploy it by using macdeployqt but when I run it on other mac.

I run otool -L with my app and It says

/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)

It seems it uses the library from my machine so when I run it on other machine it can't use the Qt library in the Frameworks folder within the app bundle.

How can I fix it?

4

4 回答 4

1

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

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

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

于 2013-08-12T08:17:49.687 回答
1

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

于 2013-08-11T16:19:03.500 回答
1

我目前没有解决方案,但我遇到了与您在运行macdeployqt. 根据另一篇文章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 库时,我的应用程序不再工作,因为它可以t 找到由 设置的库macdeployqt

于 2013-08-28T23:08:08.600 回答
1

这是 Qt 安装中的一个错误,它macdeployqt在 5.1.0 中停止正常运行,如用户 kimbaudi 的回答中所述。

它已在 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 以及可执行文件。

于 2013-08-28T23:40:53.567 回答