【问题标题】:OpenSSL issue under 64bit server and none under same 32bit (QT app)64 位服务器下的 OpenSSL 问题,相同的 32 位服务器下没有(QT 应用程序)
【发布时间】:2026-02-09 10:05:01
【问题描述】:

在将 QT 从 4.8.5 升级到 5.4.0 后,我们遇到了服务器端的问题。 构建是在 Debian wheezy(64 位)和 32 位机器上完成的。 当我们在 32 位机器上启动服务器时,使用命令 openssl s_client -connect xxx.xxx.xxx.xxx:4443 我们收到带有证书的答案,但在 64 位机器下什么都没有发生,只显示“已连接”。 两台机器都安装了openssl 1.0.0e版本,QT是使用web安装器安装的(直接复制需要的对象,所以机器上没有编译)。

另一件事,当尝试在 windows7 下启动服务器时,它正在加载所需的 openssl dll(32 位)并且它可以工作。

我错过了什么吗?

附:此外,QT 示例在 64 位 linux 机器(sslechoserver 和 sslechoclient)上编译时没有连接

【问题讨论】:

    标签: c++ qt openssl 64-bit qt5.4


    【解决方案1】:

    在 QTcpServer::incomingConnection 中发现了问题。 在 QT5.4 上使用 qintptr 作为 socketDescriptor。 这种类型保证与所有指针的大小相同 Qt 支持的平台。在具有 32 位指针的系统上,qintptr 是 qint32 的 typedef;在具有 64 位指针的系统上,qintptr 是 qint64 的 typedef。

    这就是为什么它在 32 位而不是 64 位机器上工作的原因。 (纯属运气)

    【讨论】: