繁体   English   中英

使用 boost::asio/windows7/visual studio 2010 的编译器错误

[英]Compiler errors using boost::asio/windows7/visual studio 2010

几个小时以来,我一直在努力尝试在我的系统(win7、vs2010、boost 1.49)上编译一个 boost::asio 程序。 Boost 已正确构建并链接到我的 vs 项目。 我用 boost::regex 进行了测试,一切正常。

编译器抱怨 2 个标头(in6addr.h、ws2ipdef.h),大约 90% 是 C2146(语法)和 C2079(未定义的类/结构/联合名称)错误。

这些错误中有大量与 windows 类型定义(USHORT、ULONG...)和未定义的 winsock 定义(SOCKET_ADDRESS、ADDRESS_FAMILY)有关。 在这篇文章的末尾可以找到一个示例。

我的包括以下内容:

#pragma once

#include "targetver.h"
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/cstdint.hpp>
#include <boost/bind.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <stdio.h>
#include <tchar.h>
#include <string>
#include <cassert>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <map>
#include <sstream>
  • 我尝试了逐个文件包含定义并在预编译的 header 中收集这些定义。

  • 鉴于我的问题似乎与 winsock2 和 windows 定义有关,我尝试使用适当的定义 (WIN32_LEAN_AND_MEAN..) 声明命令以所有可能的方式将它们包括在内,但无济于事。

  • 我尝试在独立程序中运行 winsock2,一切运行正常。

我的问题似乎与这个非常相似(尝试了所有未解决的建议/问题):

http://www.developpez.net/forums/d585193/c-cpp/cpp/bibliotheques/boost/asio-erreur-syntaxe-specificateur-type-manquant-d/

我已经弄坏了 2 个键盘,并认真考虑用我剩下的鼠标上吊。 请帮忙!

在此先感谢您的时间。

托马斯

错误示例:

ws2ipdef.h

Erreur 171 error C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 336 1 asioProto Erreur 180 error C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 354 1 asioProto Erreur 189 error C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\ windows\v7.0a\include\ws2ipdef.h 372 1 asioProto Erreur 198 error C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 390 1 asioProto Erreur 18 error C2079: 'sockaddr_gen::Address' utilize une struct de 'sockaddr' non défini c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 75 1 asioProto Erreur 19 error C2079: 'sockaddr_gen::AddressIn' utilize une struct de 'sockaddr_in' non défini c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 76 1 asioProto Erreur 177 error C2086: '整数 BOOLEAN' : redéfinition c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 354 1 asioProto Erreur 186 error C2086: 'int BOOLEAN' : redéfinition c:\program files (x86)\微软 sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProto

in6地址.h

Erreur 7 error C2143: erreur de syntaxe : absence de ';' avant '*' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 27 1 asioProto Erreur 1 error C2146: 语法错误:缺少 ';' avant l'identificateur 'Byte' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 4 error C2146: 语法错误:缺少 ';' avant l'identificateur 'Word' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 25 1 asioProto Erreur 2 错误 C4430: spécificateur de type manquant - int est pris en compte par défaut . 备注:C++ ne prend pas en charge int par défaut c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 3 error C4430: spécificateur de type manquant - int est pris en compte par défaut。 备注:C++ ne prend pas en charge int par défaut c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 5 error C4430: spécificateur de type manquant - int est pris en compte par défaut。 备注:C++ ne prend pas en charge int par défaut c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 25 1 asioProto

终于成功了。 有点儿。

问题在于用于编译的 VS 工具集(VS2010 上默认为 v100)。 切换做v90或SDK 7.1时,编译ok。

不知道为什么。

项目属性 > 一般 > 平台工具集

C++ 本机多目标

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM