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

Mapbox / openSSL



  • Hi there.

    I am currently trying to utilize a "mapbox" map inside an android application. I am using Qt 5.7 on windows. When I try to run example code that I have found online I merely get a blank screen on my tablet. It is my understanding that I need to include the 2 built openSSL libraries but I am struggling to do so. I was originally getting errors relating to not finding the libraries but after tracking down some prebuilt ones I appear to get this error.

    W libmapbox.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method
    W libmapbox.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method
    

    mapbox.pro

    TEMPLATE = app
    
    QT += qml quick location positioning network
    CONFIG += c++11
    
    SOURCES += main.cpp
    
    RESOURCES += qml.qrc
    
    LIBS += -L C:/openssl-1.0.2/armeabi-v7a/lib
    
    INCLUDEPATH += -L C:/openssl-1.0.2/include
    
    # Additional import path used to resolve QML modules in Qt Creator's code model
    QML_IMPORT_PATH =
    
    # Default rules for deployment.
    include(deployment.pri)
    
    contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
        ANDROID_EXTRA_LIBS = \
            C:/openssl-1.0.2/armeabi-v7a/lib/libcrypto.so \
            C:/openssl-1.0.2/armeabi-v7a/lib/libssl.so \
    }
    

    Mainform.ui.qml

    import QtQuick 2.5
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.3
    import QtQuick.Dialogs 1.2
    import QtPositioning 5.6
    import QtLocation 5.6
    import "C:/Users/Jayce/Desktop/mapbox-gl-native-master/platform/qt/include/QMapbox"
    
    Rectangle
    {
               Plugin
               {
               id: mapbox
               name:"mapbox"
               PluginParameter { name: "mapbox.access_token"; value: "//access_token//" }
               PluginParameter { name: "mapbox.map_id"; value: "//map id//" }
               }
               Map
               {
               id: map
               anchors.fill: parent
               plugin: mapbox
               zoomLevel: 15
               }
    
    }
    

    main.cpp

    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QQuickView>
    #include <C:/Users/Jayce/Desktop/mapbox-gl-native-master/platform/qt/include/QMapbox>
    #include <openssl/ssl.h>
    #include <openssl/ssl2.h>
    #include <openssl/ssl23.h>
    #include <openssl/aes.h>
    #include <QtNetwork>
    #include <QMap>
    
    
    
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
    
        QQmlApplicationEngine engine;
        engine.load(QUrl(QStringLiteral("qrc:/MainForm.ui.qml")));
    
        return app.exec();
    }
    

    I also tried building my own openSSL libs using MSYS2 from this documentation:
    http://doc.qt.io/qt-5/opensslsupport.html

    it appeared to configure okay but then got to the "make build_libs" stage and received this error

    make build_libs
    making all in crypto...
    make[1]: Entering directory '/c/openssl-1.0.2h/crypto'
    /usr/bin/perl ../util/mkbuildinf.pl "gcc -I. -I.. -I../include  -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -march=armv7-a -mandroid -I/include -B/lib -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM" "android-armv7" >buildinf.h
    gcc -I. -I.. -I../include  -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -march=armv7-a -mandroid -I/include -B/lib -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM   -c -o cryptlib.o cryptlib.c
    gcc.exe: error: unrecognized command line option '-mandroid'
    <builtin>: recipe for target 'cryptlib.o' failed
    make[1]: *** [cryptlib.o] Error 1
    make[1]: Leaving directory '/c/openssl-1.0.2h/crypto'
    Makefile:284: recipe for target 'build_crypto' failed
    make: *** [build_crypto] Error 1
    
    

    I even tried making an ubuntu virtual machine and tried to build Qt there as I read that is comes with openssl enabled as default on linux. But after installing and restarting the VM it just hangd with a strange graphical glitch. I may create a dual boot for ubuntu and try again on linux without a virtual machine, but would prefer to be able to use windows to build my apps. Any thoughts?



  • Did you put the OpenSSL binaries in your path? Placing these in my path are typically enough for me to get past the issue. If you got pre-built binaries for Windows, were they built with the same version of VS you are building with? I believe there may be some dependency, so you could end up trying to build with 2015, and using 2013 built OpenSSL libs.


Log in to reply