如何在Mac OS X上部署Phonon相关的Qt4/PyQt4/python应用程序?

问题描述:

我写过一个跨平台的Qt4/PyQt4/python应用程序,即MyGreatApp,它的最后一个版本需要Phonon模块。 MyGreatApp在我自己的机器上运行得很好,在Mac OS X 10.6 Snow Leopard下,更常见的情况是在任何安装了Qt4.4的Mac上。然而,无辜的机器却无法加载声子:如何在Mac OS X上部署Phonon相关的Qt4/PyQt4/python应用程序?

WARNING: bool Phonon::FactoryPrivate::createBackend() phonon backend plugin could not be loaded 

似乎很明显,某些依赖关系保留在可执行文件中。下面是包括声子的东西:

$ find . -name "*phonon*" -print 
./Contents/Frameworks/phonon.framework 
./Contents/Frameworks/phonon.framework/phonon 
./Contents/Frameworks/phonon.framework/phonon.prl 
./Contents/Frameworks/phonon.framework/Versions/4/phonon 
./Contents/plugins/phonon_backend 
./Contents/plugins/phonon_backend/libphonon_qt7.dylib 
./Contents/Resources/lib/python2.5/lib-dynload/PyQt4/phonon.so 

这里是install_name_tool命令我调用构建应用程序后:

PLUGINSREF = /usr/local/Trolltech/Qt-4.4.3/plugins 
QTLIB  = /usr/local/Trolltech/Qt-4.4.3/lib 
PLUGINS = dist/MyGreatApp.app/Contents/plugins 
RESOURCES = dist/MyGreatApp.app/Contents/Resources 
PHONON  = phonon.framework/Versions/4/phonon 
QTCORE  = QtCore.framework/Versions/4/QtCore 
QTGUI  = QtGui.framework/Versions/4/QtGui 

echo "Installing plugins" 
mkdir -p "$PLUGINS"/phonon_backend 
cp $PLUGINSREF/phonon_backend/libphonon_qt7.dylib "$PLUGINS"/phonon_backend 
install_name_tool -change $QTLIB/$PHONON @executable_path/../Frameworks/$PHONON "$PLUGINS"/phonon_backend/libphonon_qt7.dylib 
install_name_tool -change $QTLIB/$QTCORE @executable_path/../Frameworks/$QTCORE "$PLUGINS"/phonon_backend/libphonon_qt7.dylib 
install_name_tool -change $QTLIB/$QTGUI @executable_path/../Frameworks/$QTGUI "$PLUGINS"/phonon_backend/libphonon_qt7.dylib 

echo "Adding Panther compatibility when building on Leopard" 
install_name_tool -change /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore "$PLUGINS"/phonon_backend/libphonon_qt7.dylib 

echo "Installing dynamic libraries" 
install_name_tool -change $QTLIB/$PHONON @executable_path/../Resources/lib/$PHONON "$RESOURCES"/lib/python2.5/lib-dynload/PyQt4/phonon.so 
install_name_tool -change $QTLIB/$QTCORE @executable_path/../Resources/lib/$QTCORE "$RESOURCES"/lib/python2.5/lib-dynload/PyQt4/phonon.so 
install_name_tool -change $QTLIB/$QTGUI @executable_path/../Resources/lib/$QTGUI "$RESOURCES"/lib/python2.5/lib-dynload/PyQt4/phonon.so 

什么不顺心,或者任何暗示,以提高诊断的任何想法?

+0

好像是'pyinstaller'与'appdmg'搭配解决了这个问题吗? – 2015-12-16 02:06:05

如果你看看Qt的源代码发布(你可能只需要下载它并自己构建它),那么它构建的一个小实用程序称为“macdeploy_qt”。如果你用你的可执行文件设置了一个应用程序包(比如创建一个myapp.app,并将'myapp'可执行文件放在myapp.app/Contents/MacOS中)并运行'macdeploy_qt myapp.app',它会分析完所有的install_name_tool运行和框架资源移动给你,交给你一个应用程序包,应该“只是工作”(沉重的报价:))。

+0

“macdeploy_qt”实际上包含在Qt 4.5中,而不是Qt 4.4中,而我自己并没有成功构建它。可能是我应该升级我的安装到Qt 4.5。但是,重新整理Snow Leopard中的整个混乱(Qt + SIP + PyQT)对我来说是非常可怕的,特别是只要“支持这个版本的Mac OS X仍然是初步的”。 那么,事实上,我从昨天开始尝试这个,只是让PyQt在配置步骤失败。我想这是另一个问题:-( 无论如何,谢谢你的答案! – Aristide 2009-10-09 13:19:01

+0

当我尝试用“qmake macdeployqt.pro && make”构建macdeployqt时,后一个命令指出它无法找到文件“AvailabilityMacros.h “,它实际上出现在/ Developer/SDKs/...的几个子目录中。 – Aristide 2009-10-10 11:24:18

+0

感谢关于** macdeployqt **的提示(现在在Qt 4.8中这样称呼它),它真的让我的一天! – 2012-07-17 18:44:07