Important: Please read the Qt Code of Conduct -

Why Qt creator say "use of undeclared identifier 'QSslSocket'", but it exists.

  • error: use of undeclared identifier 'QSslSocket'


    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QSslSocket>
    int main(int argc, char *argv[]) {
        qDebug() << "Device supports OpenSSL: " << QSslSocket::supportsSsl();
        QGuiApplication app(argc, argv);
        QQmlApplicationEngine engine;
        const QUrl url(QStringLiteral("qrc:/main.qml"));
        QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                         &app, [url](QObject *obj, const QUrl &objUrl) {
            if (!obj && url == objUrl)
        }, Qt::QueuedConnection);
        return app.exec();

    I tried:

    1. check in /usr/local/Qt-5.15.1-android/include

    [sen@x include]$ find . -type f -name "qsslsocket.h"

    2. No problem in the old version(Qt 5.13.2)

    QT += quick
    QT += network
    CONFIG += c++11

  • Lifetime Qt Champion

    @senmx When do you get this error: while building your project?

  • @jsulm No, It hasn't been compiled yet, and qt creator reports an error directly.

  • Lifetime Qt Champion

    @senmx OK, then this comes from code model (clang) - it often reports false positive for what ever reason. If you do not want to use it disable the plug-in ClangCodeModel in Help/About Plugins...

  • @jsulm Thanks. I found that using the old version is normal, I don't know why. My new version of qt is compiled by myself after downloading the opensource code, and there is this header file under it.

  • @senmx as a side note, if that's the whole code of your "main.cpp", the #include <QSslSockect> statement seems superfluous given there are no references to such class later in the code.

  • @Pablo-J-Rogina Thanks.This is all the code, the old version is normal. I just write a test code casually, and raise this question by the way.

  • Lifetime Qt Champion


    Since you build Qt yourself, did you activate the OpenSSL option ?

  • @SGaist What option activate and how?
    This is my compile shell:

    cd /home/sen/soft/qt-everywhere-src-5.15.1
    ./configure -xplatform android-clang -prefix /usr/local/Qt-5.15.1-android --disable-rpath -nomake tests -nomake examples -android-ndk $ANDROID_NDK_HOME -android-sdk $ANDROID_SDK_HOME -no-warnings-are-errors
    make -j12
    make install

  • Lifetime Qt Champion

    You have the complete list of option if you call configure --help.

    You should also check the configure summary to see what options/features are enabled.

    And finally, if you want to build for Android with OpenSSL, you need an Android build of OpenSSL.

  • ./configure --help
    -no-openssl .......... Do not use OpenSSL [default on Apple and WinRT]
    -openssl-linked ...... Use OpenSSL and link to libssl [no]
    -openssl-runtime ..... Use OpenSSL and dynamically load libssl [auto]

    I have now turned on this option and recompile

      1 #!/bin/bash
      2 #
      3 #
      5 cd /home/sen/soft/qt-everywhere-src-5.15.1
      6 make clean
      7 OPENSSL_LIBS='-L/home/sen/github/c/openssl-1.1.1g -lssl -lcrypto' ./configure -xplatform android-clang -prefix /usr/local/Qt-5.15.1-android --disable-rpath -nomake tests -nomake examples -android-ndk $ANDROID_NDK_HOME -android-sdk $AND    ROID_SDK_HOME -no-warnings-are-errors -openssl-linked
      8 make -j12
      9 make install

    on configure:

    ERROR: Feature 'openssl-linked' was enabled, but the pre-condition '!features.securetransport && !features.schannel && libs.openssl' failed.

  • Lifetime Qt Champion

    @senmx Is /home/sen/github/c/openssl-1.1.1g the Android build?
    Check the config.log file to see why exactly it failed.

  • Lifetime Qt Champion

    @senmx You did not answer my question.

    Did you check the config.log by yourself first?
    Because if you check it you see

    > main.cpp:2:10: fatal error: 'openssl/ssl.h' file not found
    > #include <openssl/ssl.h>

    So, it could not find SSL header.

  • @jsulm
    I saw it, but I didn’t understand it. The first thing I saw from top to bottom was:

    > main.cpp:7:8: error: Intel CET not available
    > # error Intel CET not available
    > ^
    > 1 error generated.
    > make: *** [Makefile:191:main.o] 错误 1
    test config.qtbase.tests.intelcet FAILED

    Anyway, something is missing, I don’t know what is missing.

    Could not find openssl/ssl.h,but:

    [sen@x openssl]$ find /usr/include/openssl/ -type f -name "ssl.h"

    I have compiled link library files in this directory:


  • Lifetime Qt Champion

    How did you build OpenSSL for Android ?

  • @SGaist
    according to Qt doc:

    export HOST=linux-x86_64
    export PATH="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$HOST/bin":$PATH
    cd /home/sen/github/c/openssl-1.1.1g
    ./Configure shared android-arm -D__ANDROID_API__=21
    make -j12 SHLIB_VERSION_NUMBER= build_libs

  • Lifetime Qt Champion

    Then why are you mixing your system installation with your custom OpenSSL build.

    By the way, your Intel CET is likely due to a line that starts with a #. My guess is that this is a comme but Python style rather than C/C++ style.

  • @SGaist The config.log above is the log of build qt-opensource, not openssl.Myself OpenSSL build is arm binding.

  • Lifetime Qt Champion

    Can you provide the complete OpenSSL checks part ?

  • @SGaist Do you mean "make check"? In order to check whether the two files and can be used? These two files can be correctly linked to the android project and using , should be no problem.

  • Lifetime Qt Champion

    @senmx said in Why Qt creator say "use of undeclared identifier 'QSslSocket'", but it exists.:

    Do you mean "make check"?

    No, the SSL check in config.log which is:

    loaded result for library config.qtbase_network.libraries.openssl
    Trying source 0 (type openssl) of library openssl ...
    + cd /home/sen/soft/qt-everywhere-src-5.15.1/config.tests/openssl && /home/sen/soft/qt-everywhere-src-5.15.1/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" -early "CONFIG += cross_compile" 'QMAKE_USE += openssl' 'QMAKE_LIBS_OPENSSL = -L/home/sen/github/c/openssl-1.1.1g -lssl -lcrypto' /home/sen/soft/qt-everywhere-src-5.15.1/config.tests/openssl
    + cd /home/sen/soft/qt-everywhere-src-5.15.1/config.tests/openssl && MAKEFLAGS= /usr/bin/make
    > /opt/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -c -target aarch64-linux-android21 -fno-limit-debug-info -fPIC -fstack-protector-strong -DANDROID -O2 -fPIC  -I. -I/home/sen/soft/qt-everywhere-src-5.15.1/qtbase/mkspecs/android-clang -o main.o main.cpp
    > main.cpp:2:10: fatal error: 'openssl/ssl.h' file not found
    > #include <openssl/ssl.h>
    >          ^~~~~~~~~~~~~~~
    > 1 error generated.


  • Lifetime Qt Champion

    From the looks of it, you did not provide the correct path to the where the includes are located.

  • @SGaist Thanks, If this is the case, how to solve it? There are other header files that can't be found. The header file of openssl is under /usr/include.

    OPENSSL_LIBS='-L/home/sen/github/c/openssl-1.1.1g -lssl -lcrypto' ./configure -xplatform android-clang -prefix /usr/local/Qt-5.15.1-android --disable-rpath -nomake tests -nomake examples -android-ndk $ANDROID_NDK_HOME -android-sdk $AND    ROID_SDK_HOME -no-warnings-are-errors -openssl-linked

  • Lifetime Qt Champion

    The headers in /usr/includes are usually the ones installed by official packages. Where are the ones from the version you built ?

  • @jsulm @SGaist
    I added the "-headerdir" is the same:

    ./configure -headerdir /home/sen/github/c/openssl-1.1.g/include ...

    I don't think this is the reason, because when the option openssl-linked is not enabled, the ./configure is successful, and these errors will also appear in the config.log.

  • Lifetime Qt Champion

    -headerdir is for where the headers will be installed.

    Use the -I parameter to add other paths to look for headers.

  • @SGaist Well, I have tried all these parameters, it is probably a bug, because I saw the same problem in the bug feedback area. I am using the lower version now, the installation version.

Log in to reply