我想编译QGis,它需要QApplication具有commitData()以及saveState()成员函数。想一想,如果声明的话,它们会放在预处理器中:
#ifndef QT_NO_SESSIONMANAGER
void commitDataRequest(QSessionManager &sessionManager);
void saveStateRequest(QSessionManager &sessionManager);
#endif
但QT_NO_SESSIONMANAGER
已定义,并且未声明或定义这些函数。当我#undef在qapplication.h中的宏时,我收到了未定义的引用错误。所以,似乎我应该以另一种方式解决问题。
我怀疑我使用的Qt配置是否存在问题,因为会话管理器是在预构建的Qt库中定义的,但它不在Qt我编译的Qt v4.8.2.2中。我也可以向qmake或gcc发送一些参数来定义/取消定义这个宏。我在网上搜索了一段相关资料。 stackoverflow,但我找不到答案。
答案 0 :(得分:2)
这是您的Qt配置的问题。看来你编译的Qt没有会话管理支持(支持X会话管理,链接在-lSM -lICE中)。
可能您没有在系统上安装sm-dev库:
dpkg -l | grep libsm-dev
sudo apt-get install libsm-dev
再次尝试编译Qt的来源。运行qt的configure时,确保启用了会话管理(是)。