Qt5无法找到Mac OS X平台插件。

16
我正在尝试按照此链接在Mac上部署一个Qt程序。通过对我的可执行文件及其依赖库运行otool -L,我将它们复制到应用程序包中后,在QtCreator的应用程序输出中运行时出现以下错误:

此应用程序无法启动,因为找不到或加载Qt平台插件“cocoa”。

重新安装应用程序可能会解决此问题。 程序意外终止。

我已尝试复制qt平台插件libqcocoa.dylib并更改qt.conf中的插件目录如此, 但仍然失败。

值得注意的是,我首先尝试使用qt的macdeployqt工具,但尽管这是我第一次在可执行文件上运行它,但它仍然失败并显示以下消息:

错误:无法找到“MyProgram.app/Contents/MacOS/MyProgram”的bundle二进制文件 错误:“otool:无法打开文件:(没有这样的文件或目录)” 警告: 警告:在“MyProgram.app/Contents/MacOS/MyProgram”中找不到任何外部Qt框架 警告:也许macdeployqt已经在“MyProgram.app/Contents/MacOS/MyProgram”上使用过? 警告:如果是这样,您需要在再次尝试之前重新构建“MyProgram.app/Contents/MacOS/MyProgram” 错误:无法找到“MyProgram.app/Contents/MacOS/MyProgram”的bundle二进制文件 错误:从“/Developer/Applications/Qt/plugins/platforms/libqcocoa.dylib”复制文件失败 到“MyProgram.app/Contents/MacOS/MyProgram/Contents/PlugIns/platforms/libqcocoa.dylib” 错误:从“/Developer/Applications/Qt/plugins/printsupport/libcocoaprintersupport.dylib”复制文件失败 到“MyProgram.app/Contents/MacOS/GraphiteMiniEditor/Contents/PlugIns/printsupport/libcocoaprintersupport.dylib”

当您编译程序并拥有应用程序包时,如果您右键单击该包并选择“显示包内容”,则可以查看二进制文件是否存在于“MyProgram.app/Contents/MacOS/MyProgram”中。您能确认它在那里吗? - TheDarkKnight
是的,它在那里,那就是我运行所有install_name_tool命令的文件。最终我回退到了Qt4.8,现在它可以工作了。 - Paul Musgrave
也许你可以尝试这个修改版的macdeployqt:https://github.com/MaximAlien/macdeployqt我发现在Mac上部署Qt5并不是一件很直观的事情,但是这个版本的macdeployqt对我非常有帮助。 - dfranca
2
你的操作系统中是否同时安装了Qt 4和Qt 5?如果是,请直接从Qt5目录(例如:~/Qt/5.5/clang64/bin/macdeployqt)调用macdeployqt。将应用包的路径(MyProgram.app)作为参数传递,而不是应用程序可执行文件。它应该可以正常工作(至少在OS X 10.10上的Qt 5.4和5.5)。 - Kamil Klimek
3个回答

2

关于macdeployqt失败的问题:看起来你传递给macdeployqt的参数是可执行文件的路径,而不是捆绑包的路径。也就是说,只需传递.../MyProgram.app而不是.../MyProgram.app/Contents/MacOS/MyProgram。

(但我在沙盒应用程序中也无法找到libqcocoa,可能会采取将其静态链接到我的应用程序中的方法。)


macdeployqt需要应用程序包而不是应用程序包中的可执行文件才能正常工作-最近我使用Qt 5.4.2和5.5.1为Mac OS X部署了两个不同的应用程序,使用这个工具没有任何问题。 - Kamil Klimek

1
为了让Kamil Klimek的解决方案得到更多关注(它解决了我的问题):
当我使用离线安装程序安装QtCreator(Qt 5.x)时,遇到了同样的问题,但显然也通过Homebrew安装了Qt(4.x)(可能作为依赖项引入)。使用5.x编译代码,并使用4.x的macdeployqt脚本部署代码是行不通的。
因此,请确保例如:
which macdeployqt

调用macdeployqt的版本/路径与编译代码时使用的Qt版本/路径相同。


调用 "brew list" 和 "brew remove qt" + "brew remove qt5" 似乎对我有所帮助(尽管我明确指向了正确的 macdeployqt)。 - Marc Van Daele

0
我在使用Qt 5.4.2和OS X Lion时出现了这个错误。当我安装了Xcode命令行工具之后,这个错误就不再出现了,macdeployqt也可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接