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

CMake built Qt5 QMediaPlayer program fails only when installed

我有一个使用 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)

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

"CMake will link the executables and shared libraries with full RPATH to all used libraries in the build tree. When installing, it will clear the RPATH of these targets so they are installed with an empty RPATH"

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

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

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

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