如何在使用MinGW 32编译的Qt框架中使用通过MSVC 14.0编译的库?

时间:2019-02-26 17:05:16

标签: c++ qt opencv flir

我目前正在使用使用Mint 32bit编译的Qt Creator 4.8.1和Qt 5.11.1开发的GUI。该应用程序将控制相机和传感器等不同组件。我在项目的成像部分遇到了麻烦。我们从FLIR购买了带有SDK的相机:大三角帆。

我想使用相机来获取要使用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 ++版本的版本声明此变量。例如,对于MSVC ++ 14.0,_MSC_VER = 1900。

我无法通过此错误,因此我使用编译器Microsoft Visual C ++编译器14.0(amd64_x86)将Kit Desktop QT 5.9.6 MSVC2015 32位添加到我的项目中,但是当我使用它时,Qt不再由IDE,而OpenCV都不是。

我猜问题出在我试图在同一项目中使用由2种不同的编译器编译的库这一事实。有可能这样做吗?我是否需要重新编译Spinnaker SDK才能适合我的项目?谢谢!

1 个答案:

答案 0 :(得分:3)

“如何在由MinGW 32编译的Qt框架中使用由MSVC 14.0编译的库?” -你可能不会。

C ++没有稳定的供应商中立的ABI。含义;所有内容(通常)都必须使用完全相同的编译器进行编译,以便成功链接在一起(或在运行时正常运行)

即使使用相同编译器的不同版本编译的内容也可能不兼容。

有例外,但是一般规则是:构建与完全相同的编译器链接的所有