QSslSocket 无法解析和权限被拒绝错误
QSslSocket cannot resolve and Permission Denied error
错误信息如下:
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_server_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSL_select_next_proto
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
qt.network.ssl: QSslSocket: cannot resolve SSL_set_alpn_protos
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_alpn_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_alpn_selected
我运行一台Windows7机器,我的D盘安装了openssl 1.1.0。我正在使用 Qt5.9.0
我的 .pro 文件
QT += core network
QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += main.cpp \
server.cpp \
commands.cpp \
packet.cpp
HEADERS += \
server.h \
commands.h \
packet.h
INCLUDEPATH += D:\OpenSSL-Win32\include\openssl
INCLUDEPATH += D:\OpenSSL-Win32\bin
LIBS += -L D:\OpenSSL-Win32\lib -llibcrypto
LIBS += -L D:\OpenSSL-Win32\lib -llibssl
这是触发错误的代码:
QString Commands::getPublicIp()
{
QString temp;
QNetworkAccessManager networkManager;
QUrl url("http://api.ipify.org");
QString query = "format=json";
url.setQuery(query);
QNetworkReply* reply = networkManager.get(QNetworkRequest(url));
QObject::connect(
reply
, &QNetworkReply::finished
, [&](){
if(reply->error() != QNetworkReply::NoError) {
return QString();
} else {
QJsonObject jsonObject= QJsonDocument::fromJson(reply->readAll()).object();
QHostAddress ip(jsonObject["ip"].toString());
temp = QString("002 " + ip.toString());
}
reply->deleteLater();
}
);
return temp;
}
我一直收到 qt.network.ssl 错误,链接 openssl 后我一直收到编译错误:
:-1: error: cannot find D:\OpenSSL-Win32\lib: Permission denied
:-1: error: cannot find -llibssl
collect2.exe:-1: error: error: ld returned 1 exit status
即使我目前没有使用 OpenSSL,我也愿意以后使用它。
OpenSSL 1.1.0 仅受 Qt 5.10 支持。请使用 OpenSSL 1.0.2l,您可以使用来自 npcglib.
的与您的编译器匹配的预构建包
您的 LIBS +=
包含是正确的,但您的计算似乎没有权限或找不到库。无法告知为什么会出现此错误。验证文件夹中的库是否存在以及您的用户是否具有访问权限。
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)
是异步调用。在请求完成之前,您的函数 QString Commands::getPublicIp()
可能 return 一个空的 QString。
错误信息如下:
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_server_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSL_select_next_proto
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
qt.network.ssl: QSslSocket: cannot resolve SSL_set_alpn_protos
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_alpn_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_alpn_selected
我运行一台Windows7机器,我的D盘安装了openssl 1.1.0。我正在使用 Qt5.9.0
我的 .pro 文件
QT += core network
QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += main.cpp \
server.cpp \
commands.cpp \
packet.cpp
HEADERS += \
server.h \
commands.h \
packet.h
INCLUDEPATH += D:\OpenSSL-Win32\include\openssl
INCLUDEPATH += D:\OpenSSL-Win32\bin
LIBS += -L D:\OpenSSL-Win32\lib -llibcrypto
LIBS += -L D:\OpenSSL-Win32\lib -llibssl
这是触发错误的代码:
QString Commands::getPublicIp()
{
QString temp;
QNetworkAccessManager networkManager;
QUrl url("http://api.ipify.org");
QString query = "format=json";
url.setQuery(query);
QNetworkReply* reply = networkManager.get(QNetworkRequest(url));
QObject::connect(
reply
, &QNetworkReply::finished
, [&](){
if(reply->error() != QNetworkReply::NoError) {
return QString();
} else {
QJsonObject jsonObject= QJsonDocument::fromJson(reply->readAll()).object();
QHostAddress ip(jsonObject["ip"].toString());
temp = QString("002 " + ip.toString());
}
reply->deleteLater();
}
);
return temp;
}
我一直收到 qt.network.ssl 错误,链接 openssl 后我一直收到编译错误:
:-1: error: cannot find D:\OpenSSL-Win32\lib: Permission denied
:-1: error: cannot find -llibssl
collect2.exe:-1: error: error: ld returned 1 exit status
即使我目前没有使用 OpenSSL,我也愿意以后使用它。
OpenSSL 1.1.0 仅受 Qt 5.10 支持。请使用 OpenSSL 1.0.2l,您可以使用来自 npcglib.
的与您的编译器匹配的预构建包
您的
LIBS +=
包含是正确的,但您的计算似乎没有权限或找不到库。无法告知为什么会出现此错误。验证文件夹中的库是否存在以及您的用户是否具有访问权限。QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)
是异步调用。在请求完成之前,您的函数QString Commands::getPublicIp()
可能 return 一个空的 QString。