我想编译QGis,它需要QApplication具有commitData()以及saveState()成员函数。我想,它们被放入预处理器 if 语句中:
#ifndef QT_NO_SESSIONMANAGER
void commitDataRequest(QSessionManager &sessionManager);
void saveStateRequest(QSessionManager &sessionManager);
#endif
但是QT_NO_SESSIONMANAGER
已定义,并且这些函数未声明或定义。当我 #undef qapplication.h 中的宏时,我收到了 undefined reference 错误。所以,看来我应该用另一种方式来解决这个问题了。
我怀疑我使用的Qt配置是否有问题,因为 session 管理器是在预构建的Qt库中定义的,但它不在我编译的Qt v4.8.2.2中。我也可能应该向 qmake 或 gcc 发送一些参数来定义/取消定义这个宏。我在网络和 stackoverflow 上搜索了相关 Material 一段时间,但没有找到答案。
最佳答案
这是您的 Qt 配置问题。看来您编译的 Qt 没有 session 管理支持(支持 X session 管理,-lSM -lICE 中的链接)。
您的系统上可能没有安装 sm-dev 库:
dpkg -l | grep libsm-dev
sudo apt-get install libsm-dev
再次尝试编译 Qt 源代码。确保在运行 qt 的配置时启用了 session 管理(是)。
关于C++/Qt 定义/取消定义 QT_NO_SESSIONMANAGER 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490619/