CMake构建的Qt5 QMediaPlayer程序仅在安装时失败

时间:2015-03-28 20:29:09

标签: qt cmake qt5

我有一个使用QMediaPlayer的简单Qt 5.4应用程序。我用CMake构建它。通过运行" make"创建的可执行文件正常工作并播放歌曲。从运行" make install"创建和安装的可执行文件在Ubuntu 14.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)

1 个答案:

答案 0 :(得分:1)

这很可能与CMake RPATH处理有关。引自Cmake docs

&#34; CMake将可执行文件和共享库与完整的RPATH链接到构建树中的所有已使用的库。安装时,它将清除这些目标的RPATH,以便安装一个空的RPATH&#34;

这可以解释您正在观察的行为。

如果确实如此,将QT路径添加到LD_LIBRARY_PATH环境变量可能就足够了。

或者可以将CMAKE_INSTALL_RPATH设置为CMakeLists.txt内的正确路径。

在CMakeLists.txt中有更多选项可以使用RPATH设置 - 请参阅上面的文档链接。