简体   繁体   English

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

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

I'm struggling since several hours trying to compile a boost::asio program on my system (win7, vs2010, boost 1.49).几个小时以来,我一直在努力尝试在我的系统(win7、vs2010、boost 1.49)上编译一个 boost::asio 程序。 Boost has been properly builed and linked to my vs project. Boost 已正确构建并链接到我的 vs 项目。 I made a test run with boost::regex and everything worked ok.我用 boost::regex 进行了测试,一切正常。

The compiler complain about 2 headers (in6addr.h, ws2ipdef.h), about 90% being C2146 (syntax) and C2079 (undefined class/struc/union name) errors.编译器抱怨 2 个标头(in6addr.h、ws2ipdef.h),大约 90% 是 C2146(语法)和 C2079(未定义的类/结构/联合名称)错误。

A large amount of these errors relate to windows type definition (USHORT,ULONG...) and winsock definition(SOCKET_ADDRESS, ADDRESS_FAMILY) being undefined.这些错误中有大量与 windows 类型定义(USHORT、ULONG...)和未定义的 winsock 定义(SOCKET_ADDRESS、ADDRESS_FAMILY)有关。 A sample can be found at the end of this post.在这篇文章的末尾可以找到一个示例。

My includes are the following:我的包括以下内容:

#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>
  • I tried both file by file include definition and to gather up those in the precompiled header.我尝试了逐个文件包含定义并在预编译的 header 中收集这些定义。

  • Given that my problem seems related to winsock2 and windows definitions, i tried to include them in all possible ways using appropriate defineds (WIN32_LEAN_AND_MEAN..) an declaration order to no avail.鉴于我的问题似乎与 winsock2 和 windows 定义有关,我尝试使用适当的定义 (WIN32_LEAN_AND_MEAN..) 声明命令以所有可能的方式将它们包括在内,但无济于事。

  • I tried running winsock2 in a stand alone program and everything runned ok.我尝试在独立程序中运行 winsock2,一切运行正常。

My problem seem awfully similar to this one (tried out all advices / question unresolved):我的问题似乎与这个非常相似(尝试了所有未解决的建议/问题):

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

I've already broke 2 keyboards and seriously consider hanging myself with whats left of my mouse.我已经弄坏了 2 个键盘,并认真考虑用我剩下的鼠标上吊。 Please help!请帮忙!

Thanks in advance for your time.在此先感谢您的时间。

Thomas托马斯

Error sample:错误示例:

ws2ipdef.h 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' utilise 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' utilise 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: 'int 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)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProto 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

in6addr.h in6地址.h

Erreur 7 error C2143: erreur de syntaxe : absence de ';' 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: 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: erreur de syntaxe : absence de ';' 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 error C4430: spécificateur de type manquant - int est pris en compte par défaut. 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 . Remarque : 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 3 error C4430: spécificateur de type manquant - int est pris en compte par défaut。 Remarque : 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 24 1 asioProto Erreur 5 error C4430: spécificateur de type manquant - int est pris en compte par défaut。 Remarque : 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备注: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

Finally managed to nail it.终于成功了。 Kind of.有点儿。

Problem lied with the VS toolset used for compilation (v100 by default on VS2010).问题在于用于编译的 VS 工具集(VS2010 上默认为 v100)。 When switched do v90 or SDK 7.1, compile ok.切换做v90或SDK 7.1时,编译ok。

Not sure why though.不知道为什么。

Project properties > general > platform toolset项目属性 > 一般 > 平台工具集

C++ Native Multi-Targeting C++ 本机多目标

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

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