用Qt进行网络开发,所以程序中包含了
network
模块,但编译Qt程序时报错aggregate 'QSslConfiguration conf' has incomplete type and cannot be defined
,报错截图如下
QSslConfiguration
类是Qt框架中用于SSL
配置的一部分,报错表示编译器没有找到 QSslConfiguration
的完整定义,需要对以下几方面进行检查
- 编译环境中需要包含Qt的
ssl
模块的正确头文件 - 配置文件(.pro或CMakeLists.txt)需要包含
ssl
模块
// pro文件
QT += core network ssl crypto
// CMakeLists.txt
find_package(Qt5 COMPONENTS Network REQUIRED)
include_directories(${Qt5Network_INCLUDE_DIRS})
// Program是进程名称
target_link_libraries(Program Qt5::Network ssl crypto)
- 代码中头文件必须包含
// 有上述报错时必须检查是否包含此头文件
#include <QSslConfiguration>
// 其他相关头文件
#include <QtNetwork>
#include <QSslSocket>
#include <QNetworkReply>
#include <QNetworkRequest>
如果以上几项配置都正确的话,清理并重新构建项目,但还是有同样的报错的话,可以尝试以下方法
我是在本地通过编译Qt源码来搭建Qt环境的,查询发现Qt-5.6.0的qnetworkrequest.h源文件有以下的宏定义,所以是在编译Qt源码时未支持openssl,Qt环境和
openssl
环境有个先后顺序,需要先编译openssl
环境,再进行Qt源码的./configure
,否则在进行Qt源码配置的时候,不会支持ssl
,也就没办法进行网络相关的开发,这种情况应该比较少见,所以仅做参考。openssl
可以通过apt-get
安装,也可以下载源码编译
#ifndef QT_NO_SSL
QSslConfiguration sslConfiguration() const;
void setSslConfiguration(const QSslConfiguration &configuration);
#endif
# 安装openssl环境和头文件及静态库,openssl环境搭建后再进行Qt源码编译
# Ubuntu
sudo apt-get install openssl
sudo apt-get install openssl-devel
# CentOS
sudo yum -y install openssl
sudo yum -y install openssl-devel
Qt源码和openssl源码,点击跳转下载,我用的版本是openssl-1.0.2e
和Qt-5.6.0