0

自从尝试在我的系统(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>
  • 我尝试了逐个文件的包含定义,并在预编译的头文件中收集了这些定义。

  • 鉴于我的问题似乎与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 错误 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 错误 C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\ windows\v7.0a\include\ws2ipdef.h 372 1 asioProto Erreur 198 错误 C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 390 1 asioProto Erreur 18 错误 C2079: 'sockaddr_gen::Address' 利用 une struct de 'sockaddr' non définic:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 75 1 asioProto Erreur 19错误 C2079: 'sockaddr_gen::AddressIn' 使用 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 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 asioProtoh 354 1 asioProto Erreur 186 错误 C2086: 'int BOOLEAN' : redéfinition c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProtoh 354 1 asioProto Erreur 186 错误 C2086: 'int BOOLEAN' : redéfinition c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProto

in6addr.h

Erreur 7 错误 C2143:语法错误:缺席 de ';' avant '*' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 27 1 asioProto Erreur 1 错误 C2146: 语法错误:缺席 de ';' 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 : 缺席 de ';' 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 错误 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

4

1 回答 1

0

终于设法钉了它。有点儿。

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

不知道为什么。

项目属性 > 常规 > 平台工具集

C++ 原生多目标

于 2012-04-11T19:54:24.497 回答