poco 切换到 MT 链接错误 Visual Studio 2019

问题描述

我无法在我已经创建的项目中运行 POCO。我用示例 Websocket 做了一个新项目,试图将它配置为成功构建 => 应用程序能够启动和工作。但是当我尝试使用 OpenCV 在我的另一个项目中实施相同的步骤时,我遇到了很多错误

我用于构建两个项目的代码

#define POCO_STATIC
#include "pocoWebSocket.h"

#include <iostream>
#include <string>
using namespace std;

int main(int argc,char** argv)
{
    std::cout << std::endl<< "I am alive!" << std::endl;
    WebSocketServer app;
    std::cout << "app run" << std::endl;
    return app.run(argc,argv);
    //visit http://localhost:9980
}

项目设置为:

  • C/C++/代码生成/运行时库:/MT
  • C/C++ / General / Additional Include Directories: C:\src\POCO\Foundation\include;C:\src\POCO\Net\include;C:\src\POCO\Util\include;%(AdditionalIncludeDirectories)

链接器中:

  • 一般/附加库目录: C:\src\POCO\buildMT\lib\Debug;C:\src\POCO\buildMT\lib\Release;%(AdditionalLibraryDirectories)
  • 输入/附加依赖项: crypt32.lib ws2_32.lib iphlpapi.lib PocoNetmt.lib PocoFoundationmt.lib

当我用 OpenCV 对项目做同样的事情时,我会得到这些错误:有什么建议吗?

Build started...
1>------ Build started: Project: StitchingApp,Configuration: Debug x64 ------
1>main.cpp
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(190,3): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(192,9): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(193,9): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(1102,13): error C3646: 'szlDevice': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(1102,22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(1103,13): error C3646: 'szlMillimeters': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(1103,27): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7715,16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7715,16): error C2143: Syntax error: missing ')' before 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7715,16): error C2143: Syntax error: missing ';' before 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7715,16): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7718,36): error C2059: Syntax error: ')'
1>trStitcher.cpp
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(190,36): error C2059: Syntax error: ')'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(873,13): error C3646: 'Size': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(873,17): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(879,13): error C3646: 'Size': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(879,17): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(902,25): error C3646: 'Size': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(902,29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(914,25): error C3646: 'Size': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(914,29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\oleidl.h(1262,34): error C2061: Syntax error: identifier 'SIZEL'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\oleidl.h(1266,36): error C2061: Syntax error: identifier 'SIZEL'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\oleidl.h(1524,11): error C3646: 'sizel': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\oleidl.h(1524,16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\oleidl.h(2668,24): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\oleidl.h(3207,36): error C2061: Syntax error: identifier 'LPSIZEL'
1>trStitcher_calculation.cpp
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(190,27): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(1113,13): error C3646: 'szlMicrometers': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(1113,27): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(4009,67): error C2061: Syntax error: identifier 'LPSIZE'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5143,98): error C2061: Syntax error: identifier 'LPSIZE'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5612,13): error C3646: 'szlExtent': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5612,22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7715,36): error C2061: Syntax error: identifier 'LPSIZEL'
1>trStitcher_core.cpp
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(190,67): error C2061: Syntax error: identifier 'LPSIZE'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(4033,71): error C2061: Syntax error: identifier 'LPSIZE'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5143,22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5666,13): error C3646: 'szlCorner': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5666,22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5777,13): error C3646: 'szlstroke': unkNown override specifier
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\wingdi.h(5777,22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(4547,14): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(4562,11): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(4562,11): error C2059: Syntax error: 'constant'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(4562,22): error C2238: unexpected token(s) preceding ';'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(7715,36): error C2061: Syntax error: identifier 'LPSIZEL'
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_core.cpp(15,29): warning C4267: '=': conversion from 'size_t' to 'int',possible loss of data
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_core.cpp(281,102): warning C4244: 'argument': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=int
1>        ]
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_core.cpp(281,70): warning C4244: 'argument': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=int
1>        ]
1>trStitcher_IO_processing.cpp
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(190,22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(4562,17): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winspool.h(914,36): error C2061: Syntax error: identifier 'LPSIZEL'
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_IO_processing.cpp(15,34): warning C4244: '=': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=float
1>        ]
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_IO_processing.cpp(21,30): warning C4244: '=': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=float
1>        ]
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_IO_processing.cpp(33,62): warning C4244: 'argument': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=int
1>        ]
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_IO_processing.cpp(33,36): warning C4244: 'argument': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=int
1>        ]
1>E:\JOB\StitchingProject\StitchingApp\src\trStitcher_IO_processing.cpp(201,116): warning C4244: 'argument': conversion from 'double' to '_Tp',77): warning C4244: 'argument': conversion from 'double' to '_Tp',possible loss of data
1>        with
1>        [
1>            _Tp=int
1>        ]
1>Generating Code...
1>Done building project "StitchingApp.vcxproj" -- Failed.
========== Build: 0 succeeded,1 Failed,0 up-to-date,0 skipped ==========

解决方法

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\windef.h(190,3):

186: typedef struct tagSIZE
187: {
188:    LONG        cx;
189:    LONG        cy;
190: } SIZE,*PSIZE,*LPSIZE;
     ^ ^
     1 3

在您的代码或使用的库中的某处,定义了冲突的宏 SIZE。

,

有人给了我很大的耳光...当我教我的朋友如何编码时,我不小心定义了 SIZE 和其他东西,并意外地将它保存到我的解决方案中....我还不得不评论一些更多的东西来制作它起作用了。

感谢你们给我的小推动,谢谢。

这是我必须编辑的文件,评论的文件没有评论,config.h:

#pragma once
#ifndef STITCHING_CONFIG
#define STITCHING_CONFIG
#include <stdio.h>
#include <iostream> 
#include <string>
#include <vector>
//static const uint32_t SupportedWidth[] = { 320,480,640,800,960,1120,1600,1920,2048,2592,3264,3840,4224 };
//static const uint32_t SupportedHeight[] = { 240,360,600,720,840,1200,1080,1536,1944,2448,2160,3156 };


//#define PORT 8004
//#define FPS 1.0
//#define SIZE 7
#define INPUTRESIZE 0.5
#define OUTPUTRESIZE 1.0
#define NUMBEROFIMAGES 3

#define DEBUGID 0
#define DEBUGON false
#define DEBUGTIMESON false
#define DEBUGSTITCHINGINFO true
#define SLOWDEBUGON false
#define RUNVAL 0

#if RUNVAL == 0
#define DEBUGMODESTITCHINGAPP
#elif RUNVAL == 1
#define TESTING
#elif RUNVAL == 2
#define RUNCALIBRATION
#else 
#define RUNSTITCHINGAPP 
#endif
#endif