Как я могу использовать библиотеку, скомпилированную с MSVC 14.0 в платформе Qt, скомпилированной с MinGW 32?

В настоящее время я работаю над графическим интерфейсом пользователя, разработанным с использованием Qt Creator 4.8.1 и Qt 5.11.1, скомпилированным с MinGW 32bit. Приложение будет управлять различными компонентами, такими как камера и датчики. У меня проблемы с отображением части проекта. Мы купили камеру у FLIR, которая поставляется с SDK: Spinnaker.

Что я хочу использовать камеру для того, чтобы получать изображения, которые я буду обрабатывать, используя OpenCV. Я установил OpenCV, и он работает. Проблема исходит от SDK поставщика. Чтобы его использовать, я загружаю библиотеку в файл.pro

> INCLUDEPATH += "$$PWD\lib\Spinnaker\include"
> 
> win32:CONFIG(release, debug|release): LIBS +=
> -L$$PWD/'lib/Spinnaker/lib/vs2015/' -lSpinnaker_v140 else:win32:CONFIG(debug, debug|release): LIBS +=
> -L$$PWD/'lib/Spinnaker/lib/vs2015/' -lSpinnaker_v140 else:unix: LIBS += -L$$PWD/'lib/Spinnaker/lib/vs2015/' -lSpinnaker_v140
> 
> INCLUDEPATH += $$PWD/'lib/Spinnaker/lib/vs2015' DEPENDPATH +=
> $$PWD/'lib/Spinnaker/lib/vs2015'
> 
> win32:CONFIG(release, debug|release): LIBS +=
> -L$$PWD/'lib/Spinnaker/lib/vs2015/' -lSpinnakerGUI_WPF_v140 else:win32:CONFIG(debug, debug|release): LIBS +=
> -L$$PWD/'lib/Spinnaker/lib/vs2015/' -lSpinnakerGUI_WPF_v140 else:unix: LIBS += -L$$PWD/'lib/Spinnaker/lib/vs2015/' -lSpinnakerGUI_WPF_v140
> 
> INCLUDEPATH += $$PWD/'lib/Spinnaker/lib/vs2015' DEPENDPATH +=
> $$PWD/'lib/Spinnaker/lib/vs2015'

Затем я загружаю конкретные.h файлы, которые мне нужны для использования библиотеки. Вот тут все и начинают путаться: при компиляции возникает ошибка из одного из.h файлов библиотеки. Эта ошибка заключается в "Неизвестной платформе":

#if defined (_MSC_VER)
#   if defined (_WIN64)
#       define PLATFORM_NAME "Win64_x64"
#   else
#       define PLATFORM_NAME "Win32_i86"
#   endif
#elif defined (__GNUC__)
#   define GENICAM_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#   if defined (__LP64__)
#      if defined (__linux__)
#       define PLATFORM_NAME "Linux64_x64"
#      elif defined (__APPLE__)
#       define PLATFORM_NAME "Maci64_x64"
#      else
#       error Unknown Platform
#      endif
#   else
#      if defined (__linux__)
#       define PLATFORM_NAME "Linux32_i86"
#      elif defined (__APPLE__)
#       define PLATFORM_NAME "Maci64_x64"
#      elif defined (VXWORKS)
#       define PLATFORM_NAME "VxWorks_PPC"
#      else
#       error Unknown Platform
#      endif
#   endif
#else
#   error Unknown Platform
#endif

Эта ошибка возникает из-за того, что _MSC_VER не определен. Предполагается, что эта переменная будет объявлена ​​в зависимости от версии Microsoft Visual C++. Например, _MSC_VER = 1900 для MSVC++ 14.0.

Я не могу пройти мимо этой ошибки, и я добавил 32-битный комплект Desktop Desktop QT 5.9.6 MSVC2015 в свой проект с компилятором Microsoft Visual C++ Compiler 14.0 (amd64_x86), но когда я его использую, Qt больше не пересматривается IDE и не это OpenCV.

Я предполагаю, что проблема заключается в том, что я пытаюсь использовать библиотеки, скомпилированные с двумя разными компиляторами в одном проекте. Можно ли так поступить? Нужно ли перекомпилировать Spinnaker SDK, чтобы соответствовать моему проекту? Спасибо!

1 ответ

"Как я могу использовать библиотеку, скомпилированную с MSVC 14.0 в платформе Qt, скомпилированной с MinGW 32?" - Вы, вероятно, не можете.

C++ не имеет стабильного поставщика, нейтрального ABI. Имея в виду; все (обычно) должно быть скомпилировано с одним и тем же компилятором, чтобы быть успешно связанными вместе (или работать правильно во время выполнения)

Даже вещи, скомпилированные с разными версиями одного и того же компилятора, могут быть несовместимы.

Есть исключения, но общее правило таково: собирайте все, что вы связываете, с одним и тем же компилятором.

Другие вопросы по тегам