Reputation: 23
I'm struggling since several hours trying to compile a boost::asio program on my system (win7, vs2010, boost 1.49). Boost has been properly builed and linked to my vs project. I made a test run with boost::regex and everything worked ok.
The compiler complain about 2 headers (in6addr.h, ws2ipdef.h), about 90% being C2146 (syntax) and C2079 (undefined class/struc/union name) errors.
A large amount of these errors relate to windows type definition (USHORT,ULONG...) and winsock definition(SOCKET_ADDRESS, ADDRESS_FAMILY) being undefined. 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.
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.
I tried running winsock2 in a stand alone program and everything runned ok.
My problem seem awfully similar to this one (tried out all advices / question unresolved):
I've already broke 2 keyboards and seriously consider hanging myself with whats left of my mouse. Please help!
Thanks in advance for your time.
Thomas
Error sample:
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 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
in6addr.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: 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: erreur de syntaxe : absence de ';' 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. 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. 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. 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
Upvotes: 0
Views: 1569
Reputation: 23
Finally managed to nail it. Kind of.
Problem lied with the VS toolset used for compilation (v100 by default on VS2010). When switched do v90 or SDK 7.1, compile ok.
Not sure why though.
Project properties > general > platform toolset
Upvotes: 0