我有一个使用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)
答案 0 :(得分:1)
这很可能与CMake RPATH处理有关。引自Cmake docs:
&#34; CMake将可执行文件和共享库与完整的RPATH链接到构建树中的所有已使用的库。安装时,它将清除这些目标的RPATH,以便安装一个空的RPATH&#34;
这可以解释您正在观察的行为。
如果确实如此,将QT路径添加到LD_LIBRARY_PATH环境变量可能就足够了。
或者可以将CMAKE_INSTALL_RPATH设置为CMakeLists.txt内的正确路径。
在CMakeLists.txt中有更多选项可以使用RPATH设置 - 请参阅上面的文档链接。