2

我想编译需要 QApplication 具有 commitData() 以及 saveState() 成员函数的 QGis。想一想,它们被放入预处理器 if 语句中:

#ifndef QT_NO_SESSIONMANAGER
void commitDataRequest(QSessionManager &sessionManager);
void saveStateRequest(QSessionManager &sessionManager);
#endif

但是QT_NO_SESSIONMANAGER已定义且这些函数未声明,也未定义。当我#undef qapplication.h 中的宏时,我收到未定义的引用错误。所以,看来我应该用另一种方式解决这个问题。我怀疑我使用的 Qt 配置是否有问题,因为会话管理器是在预构建的 Qt 库中定义的,但它不在我编译的 Qt v4.8.2.2 的 Qt 中。也有可能我应该向 qmake 或 gcc 发送一些参数来定义/取消定义这个宏。我在网上和 stackoverflow 上搜索了一段时间的相关资料,但没有找到答案。

4

1 回答 1

2

这是您的 Qt 配置的问题。看来您编译的 Qt 没有会话管理支持(支持 X 会话管理,-lSM -lICE 中的链接)。

可能您的系统上没有安装 sm-dev 库:

dpkg -l | grep libsm-dev

sudo apt-get install libsm-dev

再次尝试编译您的 Qt 源代码。确保在运行 qt 的配置时启用了会话管理(是)。

于 2013-02-14T11:49:34.820 回答