Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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



  • error: use of undeclared identifier 'QSslSocket'

    code:

    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QSslSocket>
    
    int main(int argc, char *argv[]) {
    
        qDebug() << "Device supports OpenSSL: " << QSslSocket::supportsSsl();
    
        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    
        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)
                QCoreApplication::exit(-1);
        }, Qt::QueuedConnection);
        engine.load(url);
    
        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"
    ./QtNetwork/qsslsocket.h
    

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

    test.pro:

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

  • Qt Champions 2019

    @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.


  • Qt Champions 2019

    @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

    Hi,

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



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

    #!/bin/bash
    #https://doc.qt.io/qt-5/android-building.html
    
    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 #https://doc.qt.io/qt-5/android-building.html
      3 #https://doc.qt.io/qt-5/ssl.html
      4 
      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.
    

  • Qt Champions 2019

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




  • Qt Champions 2019

    @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"
    /usr/include/openssl/ssl.h
    

    I have compiled link library files in this directory:

    /home/sen/github/c/openssl-1.1.1g
    
    libssl_1_1.so
    libcrypto_1_1.so
    

  • Lifetime Qt Champion

    How did you build OpenSSL for Android ?



  • @SGaist
    according to Qt doc:

    #!/bin/sh
    
    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= SHLIB_EXT=_1_1.so 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 libssl_1_1_1.so and libcrypto_1_1_1.so can be used? These two files can be correctly linked to the android project and using , should be no problem.


  • Qt Champions 2019

    @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.
    

    @SGaist


  • 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