首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSslSocket无法解决并拒绝权限错误

QSslSocket无法解决并拒绝权限错误
EN

Stack Overflow用户
提问于 2018-04-25 18:57:59
回答 1查看 1.1K关注 0票数 0

错误消息如下:

qt.network.ssl: QSslSocket:无法解决TLSv1_1_client_method qt.network.ssl: QSslSocket:无法解决TLSv1_2_client_method qt.network.ssl: QSslSocket:无法解决TLSv1_1_server_method qt.network.ssl: QSslSocket:无法解决TLSv1_2_server_method qt.network.ssl: QSslSocket:无法解决SSL_select_next_proto qt.network.ssl: QSslSocket:无法解决SSL_CTX_set_next_proto_select_cb qt.network.ssl: QSslSocket:无法解决SSL_get0_next_proto_negotiated qt.network.ssl: QSslSocket:无法解决SSL_set_alpn_protos qt.network.ssl: QSslSocket:无法解决SSL_CTX_set_alpn_select_cb qt.network.ssl: QSslSocket:无法解决SSL_get0_alpn_selected

我运行一台Windows 7机器,在我的D:驱动器上安装了OpenSSL1.1.0。我正在使用Qt5.9.0

我的.pro文件

代码语言:javascript
复制
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

这是触发错误的代码:

代码语言:javascript
复制
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:错误:无法找到D:\OpenSSL-lib 32\lib:权限被拒绝 -1:错误:找不到-llibssl 收件2.exe:-1:错误:错误: ld返回1退出状态

尽管我目前不使用OpenSSL,但我愿意稍后使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-25 19:19:13

  1. QT5.10只支持OpenSSL 1.1.0。请使用OpenSSL 1.0.2l,您可以使用与npcglib编译器匹配的预构建包。
  2. 您的LIBS +=包含是正确的,但似乎您的计算没有权限,或者没有找到库。无法说明发生此错误的原因。验证文件夹中库的存在以及您的用户是否有访问权限。
  3. QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)是异步调用。函数QString Commands::getPublicIp()可能会在请求完成之前返回一个空的QString。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50029549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档