Как я могу использовать библиотеку, скомпилированную с 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. Имея в виду; все (обычно) должно быть скомпилировано с одним и тем же компилятором, чтобы быть успешно связанными вместе (или работать правильно во время выполнения)
Даже вещи, скомпилированные с разными версиями одного и того же компилятора, могут быть несовместимы.
Есть исключения, но общее правило таково: собирайте все, что вы связываете, с одним и тем же компилятором.