3

我编写了一个跨平台的 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

对出了什么问题有任何想法,或者有任何改进诊断的提示吗?

4

1 回答 1

3

如果您查看 Qt 的源代码分发版(您可能只需要下载并自己构建它),它会构建一个名为“macdeploy_qt”的小实用程序。如果您使用可执行文件设置应用程序包(即创建 myapp.app 并将“myapp”可执行文件放在 myapp.app/Contents/MacOS 中)并运行“macdeploy_qt myapp.app”,它将分析所有install_name_tool 运行,framework-to-Resources 为您移动,将一个应该“正常工作”的应用程序包交还给您(那里的引号很重:))。

于 2009-10-08T21:43:47.340 回答