Qt 5.3.1:macdeployqt 尝试包含我硬盘上的所有内容;怎么修?

Posted

技术标签:

【中文标题】Qt 5.3.1:macdeployqt 尝试包含我硬盘上的所有内容;怎么修?【英文标题】:Qt 5.3.1: macdeployqt tries to include everything on my hard drive; how to fix? 【发布时间】:2014-10-15 06:31:17 【问题描述】:

我在 Mac OS X 10.8 和 10.9 上运行 Qt 5.3.1 我正在尝试使用 macdeployqt 工具将库和插件与我的可执行文件捆绑在一起,但它显然试图将所有内容都包含在我的硬盘上。

我调用它:

/Applications/Qt/5.3.1/5.3/clang_64/bin/macdeployqt /Users/adamwilt/Desktop/temp/DesktopPixie.app -verbose=2
-qmldir=/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/DesktopPixie

并获得大量正常的、预期的日志消息,例如:

Log: copy: "/Applications/Qt/5.3.1/5.3/clang_64/qml/QtQuick/Controls/Styles/Base/images" "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/QtQuick/Controls/Styles/Base/images"

...在我开始收到如下消息之前,一切都运行良好:

Log: copy: "" "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/MessageBoxUI/Enums"
ERROR: file copy failed from "/do-gst"
ERROR:  to "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/MessageBoxUI/Enums/do-gst"
ERROR: file copy failed from "/rescuepro.properties"
ERROR:  to "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/MessageBoxUI/Enums/rescuepro.properties"
ERROR: file copy failed from "/rescuepro34act.lic"

然后乐趣就开始了:

Log: copy: "/Applications" "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/MessageBoxUI/Enums/Applications"
Log:  copied: "/Applications/License.rtf"
Log:  to "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/MessageBoxUI/Enums/Applications/License.rtf"
Log: copy: "/Applications/0xED-1.0.7.app" "/Users/adamwilt/Desktop/temp/DesktopPixie.app/Contents/Resources/qml/MessageBoxUI/Enums/Applications/0xED-1.0.7.app"

它似乎正在尝试将所有内容(即“”)复制到应用程序中,但是当我还有磁盘空间时,我 ^C 退出了它!

一开始并没有这样做;然后它这样做了一个星期;然后它停止了;现在它回来了。这是一个分布式开发项目;我正在做 QML 的东西,而其他地方的人正在做 C++。其他人可能在某处更改了导致这种情况发生的配置,但我是唯一一个进行 Mac 部署的人,所以我是唯一看到这一点的人。

macdeployqt 是否有某种配置文件可能会被触发?还是更可能是与 C++ 对象 MessageBoxUI 相关的问题,它定义了几个 Q_ENUM(显然是正确的,因为它编译时没有警告或错误,并且似乎运行正常),因为这是它开始发疯时的目标目录?

【问题讨论】:

【参考方案1】:

怀疑它(足够好,我可以继续):

我尝试部署的 Qt 应用程序位于 ~/Desktop/temp 中。如果我在运行 macdeployqt 之前将当前目录设置为 ~/Desktop 或 ~/Desktop/temp,它会按预期运行。

如果我从我的主目录 ~ 或 ~/Documents 运行它,macdeployqt 会尝试提取它在 /Applications、/opt 和/或其他与应用程序无关的目录中找到的所有内容。

将 cwd 设置为大多数其他路径,包括 ~/Downloads、/Applications、~/Documents 的子目录等似乎也有效;它只是从 ~ 和 ~/Documents 运行 macdeployqt 导致问题。

没有正确解释为什么会发生这种情况,只是警告以防其他人看到这种奇怪的行为:在运行 macdeployqt 之前尝试更改应用的位置。强>

【讨论】:

以上是关于Qt 5.3.1:macdeployqt 尝试包含我硬盘上的所有内容;怎么修?的主要内容,如果未能解决你的问题,请参考以下文章

macdeployqt 不复制插件

macdeployqt 在 homebrew 安装的框架上

使用 macdeployqt 构建 QSqlDatabase 的 Qt 应用程序无法正常工作

macdeployqt源的位置

QT Quick (QML) assemble mac-.bundle -> 使用 macdeployqt 时不是动态库错误

作为 OS X 捆绑资源添加到 Qt 项目目录的内容