1

我目前正在使用使用 MinGW 32 位编译的 Qt Creator 4.8.1 和 Qt 5.11.1 开发的 GUI。该应用程序将控制不同的组件,例如相机和传感器。我在项目的成像部分遇到问题。我们从 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++ 版本的版本进行声明。例如,对于 MSVC++ 14.0,_MSC_VER = 1900。

我无法通过此错误,我使用编译器 Microsoft Visual C++ Compiler 14.0 (amd64_x86) 将 Kit Desktop QT 5.9.6 MSVC2015 32bit 添加到我的项目中,但是当我使用它时,IDE 不再对 Qt 进行识别,也没有是OpenCV。

我想问题出在我尝试在同一个项目中使用用 2 个不同编译器编译的库这一事实。有可能这样做吗?我需要重新编译 Spinnaker SDK 以适应我的项目吗?谢谢!

4

1 回答 1

3

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

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

即使使用同一编译器的不同版本编译的东西也可能兼容。

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

于 2019-02-26T17:13:22.570 回答