我目前正在使用使用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才能适合我的项目?谢谢!
答案 0 :(得分:3)
“如何在由MinGW 32编译的Qt框架中使用由MSVC 14.0编译的库?” -你可能不会。
C ++没有稳定的供应商中立的ABI。含义;所有内容(通常)都必须使用完全相同的编译器进行编译,以便成功链接在一起(或在运行时正常运行)
即使使用相同编译器的不同版本编译的内容也可能不兼容。
有例外,但是一般规则是:构建与完全相同的编译器链接的所有。