我有一个使用QMediaPlayer的简单QT5.4应用程序。我使用CMake构建它。运行"make“创建的可执行文件工作正常,并播放歌曲。通过运行"make“创建和安装的可执行文件在Ubuntu14.04上会出现以下错误
defaultServiceProvider::requestService():没有为- "org.qt-project.qt.mediaplayer“找到服务
我的代码:
#include <QMediaPlayer>
#include <QApplication>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QMediaPlayer myAudio;
myAudio.setMedia(QUrl::fromLocalFile("/absolute/path/song.mp3"));
myAudio.setVolume(50);
myAudio.play();
return app.exec();
}我的CmakeLists.txt
cmake_minimum_required(VERSION 2.8.11)
project(QtTestingExe)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Multimedia REQUIRED)
add_executable(QtTesting QtTesting.cpp)
target_link_libraries(QtTesting Qt5::Widgets Qt5::Multimedia)
install(TARGETS QtTesting DESTINATION bin)发布于 2015-03-31 17:01:07
这很可能与CMake的RPATH处理有关。引用Cmake文档
"CMake将使用完整的RPATH将可执行文件和共享库链接到构建树中的所有已使用库。在安装时,它将清除这些目标的RPATH,以便将它们安装为空的RPATH。“
这也许可以解释你所观察到的行为。
如果确实如此,将QT路径添加到LD_LIBRARY_PATH环境变量可能就足够了。
或者,可以将CMAKE_INSTALL_RPATH设置为CMakeLists.txt内的正确路径。
在CMakeLists.txt中有更多的选项可以使用RPATH设置--参见上面的文档链接。
https://stackoverflow.com/questions/29322247
复制相似问题