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

В настоящее время я работаю над графическим интерфейсом, разработанным с использованием 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 Ответ

0 голосов
/ 26 февраля 2019

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

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

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

Существуют исключения, но общее правило таково: Build everything , который вы связываете с точно таким же компилятором.

...