我编写了一个跨平台的Qt4 / PyQt4 / python应用程序,即MyGreatApp,其最后一个版本需要Phonon模块。 MyGreatApp在我自己的机器上运行得很好,在Mac OS X 10.6 Snow Leopard下,更常见的是在任何安装了Qt4.4的mac上运行。然而,无辜的机器无法加载Phonon:
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 :(得分:3)
如果你查看Qt的源代码分发(你可能只需要下载它并自己构建它),它就构建了一个名为“macdeploy_qt”的小实用工具。如果您使用可执行文件设置应用程序包(即创建一个myapp.app并将'myapp'可执行文件放在myapp.app/Contents/MacOS中)并运行'macdeploy_qt myapp.app',它将分析所有的install_name_tool运行,框架到资源为你移动,给你一个应该“正常工作”的应用程序包(重点在那里引用:))。