Ошибка undefined reference на minGW в Qt с либой сбилдженной в VS2015

Ошибка undefined reference на minGW 8.1 в Qt 5.15.2 с либой сбилдженной в VS2015. Суть такова - с mvsc 2015 и 2017 компилятор все отлично работает, а с minGW выдает ошибку по undefined reference. Что нужно сделать что бы либа заработала и на minGW? Кто то сталкивался с таким?

.pro file:

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
PRODDIR = "../.."
SOURCES += "$${PRODDIR}/include/qsecureblackbox.cpp" main.cpp archivewriter.cpp certificate.cpp filetablemodel.cpp newarchive.cpp openarchive.cpp progress.cpp
HEADERS += "$${PRODDIR}/include/qarchivereader.h" "$${PRODDIR}/include/qarchivewriter.h" "$${PRODDIR}/include/qasicsigner.h" "$${PRODDIR}/include/qasicverifier.h" "$${PRODDIR}/include/qauthenticator.h" "$${PRODDIR}/include/qauthenticodesigner.h" "$${PRODDIR}/include/qauthenticodeverifier.h" "$${PRODDIR}/include/qcadessigner.h" "$${PRODDIR}/include/qcadesverifier.h" "$${PRODDIR}/include/qcertificatemanager.h" "$${PRODDIR}/include/qcertificatestorage.h" "$${PRODDIR}/include/qcertificatevalidator.h" "$${PRODDIR}/include/qcrlmanager.h" "$${PRODDIR}/include/qcryptokeymanager.h" "$${PRODDIR}/include/qcryptokeystorage.h" "$${PRODDIR}/include/qdcauth.h" "$${PRODDIR}/include/qdcauthwebserver.h" "$${PRODDIR}/include/qdtlsclient.h" "$${PRODDIR}/include/qdtlsserver.h" "$${PRODDIR}/include/qftpclient.h" "$${PRODDIR}/include/qftpserver.h" "$${PRODDIR}/include/qhashfunction.h" "$${PRODDIR}/include/qhttpclient.h" "$${PRODDIR}/include/qhttpserver.h" "$${PRODDIR}/include/qimapclient.h" "$${PRODDIR}/include/qkmipclient.h" "$${PRODDIR}/include/qkmipserver.h" "$${PRODDIR}/include/qmailreader.h" "$${PRODDIR}/include/qmailwriter.h" "$${PRODDIR}/include/qmessagecompressor.h" "$${PRODDIR}/include/qmessagedecompressor.h" "$${PRODDIR}/include/qmessagedecryptor.h" "$${PRODDIR}/include/qmessageencryptor.h" "$${PRODDIR}/include/qmessagesigner.h" "$${PRODDIR}/include/qmessagetimestamper.h" "$${PRODDIR}/include/qmessagetimestampverifier.h" "$${PRODDIR}/include/qmessageverifier.h" "$${PRODDIR}/include/qoauthclient.h" "$${PRODDIR}/include/qocspmanager.h" "$${PRODDIR}/include/qocspserver.h" "$${PRODDIR}/include/qofficedecryptor.h" "$${PRODDIR}/include/qofficeencryptor.h" "$${PRODDIR}/include/qofficequicksigner.h" "$${PRODDIR}/include/qofficesigner.h" "$${PRODDIR}/include/qofficeverifier.h" "$${PRODDIR}/include/qotpclient.h" "$${PRODDIR}/include/qotpserver.h" "$${PRODDIR}/include/qpasswordvault.h" "$${PRODDIR}/include/qpdfdecryptor.h" "$${PRODDIR}/include/qpdfencryptor.h" "$${PRODDIR}/include/qpdfsigner.h" "$${PRODDIR}/include/qpdfverifier.h" "$${PRODDIR}/include/qpgpkeymanager.h" "$${PRODDIR}/include/qpgpkeyring.h" "$${PRODDIR}/include/qpgpreader.h" "$${PRODDIR}/include/qpgpwriter.h" "$${PRODDIR}/include/qpop3client.h" "$${PRODDIR}/include/qpublickeycrypto.h" "$${PRODDIR}/include/qrestclient.h" "$${PRODDIR}/include/qrestserver.h" "$${PRODDIR}/include/qrnd.h" "$${PRODDIR}/include/qsamlidpserver.h" "$${PRODDIR}/include/qsamlreader.h" "$${PRODDIR}/include/qsamlspserver.h" "$${PRODDIR}/include/qsamlwriter.h" "$${PRODDIR}/include/qsftpclient.h" "$${PRODDIR}/include/qsftpserver.h" "$${PRODDIR}/include/qsmtpclient.h" "$${PRODDIR}/include/qsoapclient.h" "$${PRODDIR}/include/qsoapquicksigner.h" "$${PRODDIR}/include/qsoapsigner.h" "$${PRODDIR}/include/qsoapverifier.h" "$${PRODDIR}/include/qsshclient.h" "$${PRODDIR}/include/qsshkeymanager.h" "$${PRODDIR}/include/qsymmetriccrypto.h" "$${PRODDIR}/include/qtlsclient.h" "$${PRODDIR}/include/qtlsserver.h" "$${PRODDIR}/include/qtspserver.h" "$${PRODDIR}/include/qusermanager.h" "$${PRODDIR}/include/qwebdavclient.h" "$${PRODDIR}/include/qwebdavserver.h" "$${PRODDIR}/include/qwebsocketclient.h" "$${PRODDIR}/include/qwebsocketserver.h" "$${PRODDIR}/include/qxadessigner.h" "$${PRODDIR}/include/qxadesverifier.h" "$${PRODDIR}/include/qxmldecryptor.h" "$${PRODDIR}/include/qxmlencryptor.h" "$${PRODDIR}/include/qxmlsigner.h" "$${PRODDIR}/include/qxmlverifier.h"  archivewriter.h certificate.h filetablemodel.h newarchive.h openarchive.h progress.h
FORMS += archivewriter.ui certificate.ui newarchive.ui openarchive.ui progress.ui
INCLUDEPATH += "$${PRODDIR}/include"
DEPENDPATH += "$${PRODDIR}/include"

greaterThan(QT_MAJOR_VERSION, 4) { TARGET_ARCH = $${QT_ARCH} } else { TARGET_ARCH = $${QMAKE_HOST.arch} }
contains(TARGET_ARCH, x86_64) { LIBDIR = lib64 } else { LIBDIR = lib }
CONFIG(debug, debug|release) { VARIANT = debug } else { VARIANT = release }

  PLATDIR = windows
  LIBS += -ladvapi32
  LIBNAME = qtsecureblackbox20
  # Ensures the product's DLL is copied to the output directory.
  LIBPATH = "$${PRODDIR}/$${LIBDIR}/$${PLATDIR}/$${LIBNAME}.dll"
  copydll.commands = $(COPY_FILE) \"$$replace(LIBPATH, /, \\)\" \"$$replace(OUT_PWD, /, \\)\\$${VARIANT}\"
  first.depends = $(first) copydll
  export(first.depends)
  export(copydll.commands)
  QMAKE_EXTRA_TARGETS += first copydll

LIBS += -L"$${PRODDIR}/$${LIBDIR}/$${PLATDIR}" -l$${LIBNAME}

Ответы (1 шт):

Автор решения: Ariox

Разные компиляторы используют разные реализации стандартной библиотеки. Если интерфейс функции содержит любой объект стандартной библиотеки, то не получится вызвать эту функцию из среды с другой стандартной библиотекой из-за нарушения бинарной совместимости. В том числе бинарная совместимость может сломаться для разных версий компилятора. Помимо этого, разные компиляторы могут использовать разные аллокаторы и по разному реализовывать исключения, механизмы RTTI не совместимы, а также могут быть другие мелкие особенности. И напоследок, формат имен C++ функций после компиляции не определен, хотя это можно обойти.

Технически возможна реализация C++ библиотеки, переносимой между компиляторами, но на практике вы вряд ли захотите заниматься чем-то подобным, как и большинство разработчиков. Если сильно нужно, проще написать простой C интерфейс.

При использовании mingw наиболее удобный способ решения проблемы - ставить gcc и библиотеки через msys2, там наиболее актуальная версия gcc.

→ Ссылка