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

发布于 2024-08-04 20:44:13 字数 2435 浏览 4 评论 0原文

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

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

I have written a crossplatform Qt4/PyQt4/python application, namely MyGreatApp, whose last version requires the Phonon module. MyGreatApp runs just fine on my own machine under Mac OS X 10.6 Snow Leopard, and more generally on any mac where Qt4.4 happens to be installed. However, innocent machines miserably fail to load Phonon:

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

It seems obvious that some dependancies remain in the executable. Here's the included phonon stuff:

$ 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

And here is the install_name_tool commands I invoke after building the application:

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

Any idea on what goes wrong, or any hint to improve the diagnostic?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风启觞 2024-08-11 20:44:14

如果您查看 Qt 的源代码发行版(您可能只需下载它并自己构建它),就会发现它构建了一个名为“macdeploy_qt”的小实用程序。如果您使用可执行文件设置应用程序包(即创建 myapp.app 并将“myapp”可执行文件放入 myapp.app/Contents/MacOS)并运行“macdeploy_qt myapp.app”,它将分析所有install_name_tool 运行,框架到资源为您移动,返回一个应该“正常工作”的应用程序包(那里有大量引号:))。

If you look in the source distribution of Qt (you may just have to download it and build it yourself), there's a little utility it builds called "macdeploy_qt". If you set up a application bundle with your executable (i.e. make a myapp.app and put the 'myapp' executable in myapp.app/Contents/MacOS) and run 'macdeploy_qt myapp.app', it'll analyze do all of the install_name_tool runs and framework-to-Resources moving for you, handing you back an app bundle that should 'just work' (heavy on the quotes there :) ).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文