我有一个简单的Qt 5.4应用程序,它使用QMediaPlayer。我使用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文档:
"CMake将具有完整RPATH的可执行文件和共享库链接到生成树中所有使用的库。安装时,它将清除这些目标的RPATH,以便使用空RPATH安装它们"
这可以解释你观察到的行为。
如果确实是这种情况,那么将QT路径添加到LD_LIBRARY_path环境变量中可能就足够了。
或者,可以将CMAKE_INSTALL_RPATH设置为CMakeLists.txt.内的正确路径
CMakeLists.txt中有更多选项可以使用RPATH设置-请参阅上面的文档链接。