[opensource-dev] Compilation issues under MSVC2010: Windows guru help *badly* needed !

Henri Beauchamp sldev at free.fr
Sun Jul 29 01:40:02 PDT 2012


Greetings, folks !

I just ran into a problem that lets me quite clueless: I recently migrated
the Cool VL Viewer build system from VS2005 to VS2010 and succeeded, two
weeks ago, to compile v1.26.5.0 under VS2010.

This week, I was about to make two new releases (v1.26.4.23 which is basically
the same as v1.26.5.0 with just a few things added) and v1.26.5.1 which is the
firts release with the v3.3.4 renderer backported (working just fine under
Linux).

But then I came around an issue dealing with Windows headers inclusion that
I just can't figure out. When compiling (either v1.26.4.23 or v1.26.5.1),
VS2010 fails for the llwindow library, with the following error (sources
path edited to linden\ for clarity):

llwindow.cpp
linden\indra\llwindow\llwindowwin32.h(45): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(45): error C2143: syntax error : missing ',' before '&'
linden\indra\llwindow\llwindowwin32.h(146): error C2061: syntax error : identifier 'COMPOSITIONFORM'
linden\indra\llwindow\llwindowwin32.h(147): error C2061: syntax error : identifier 'CANDIDATEFORM'
linden\indra\llwindow\llwindowwin32.h(148): error C2061: syntax error : identifier 'IMECHARPOSITION'
linden\indra\llwindow\llwindowwin32.h(150): error C2061: syntax error : identifier 'RECONVERTSTRING'
linden\indra\llwindow\llwindowwin32.h(177): error C2146: syntax error : missing ';' before identifier 'mWndProc'
linden\indra\llwindow\llwindowwin32.h(177): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(177): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(237): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(237): error C2143: syntax error : missing ',' before '&'

COMPOSITIONFORM & Co pertain to Imm.h and the errors around lines 45 and 177+
are related to undefined MSG and WNDPROC types (that seem ro pertain to
WinUser.h).

The weird thing is that I didn't change a single thing in v1.4.26.23 in
llwindows/, neither in the cmake files when compared to v1.26.5.0 that
(still) compiles just fine !!!

I checked the Windows headers inclusion and they seem just fine, with,
in llwindowwin32.h:

------------
#ifndef LL_LLWINDOWWIN32_H
#define LL_LLWINDOWWIN32_H

// Limit Windows API to small and manageable set.
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>

.../...
------------

Adding #include <Imm.h> after #include <windows.h> in llwindowwin32.h
allows to get rid of the undefined COMPOSITIONFORM ... RECONVERTSTRING
types, but adding #include <WinUser.h> doesn't solve the issue with
MSG and WNDPROC not being defined, even if I use:

------------
#ifndef LL_LLWINDOWWIN32_H
#define LL_LLWINDOWWIN32_H

// Limit Windows API to small and manageable set.
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#include <Imm.h>
#undef NOUSER
#undef NOMSG
#undef _WINUSER_
#include <WinUser.h>
------------

I always get:

llwindow.cpp
linden\indra\llwindow\llwindowwin32.h(50): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(50): error C2143: syntax error : missing ',' before '&'
linden\indra\llwindow\llwindowwin32.h(182): error C2146: syntax error : missing ';' before identifier 'mWndProc'
linden\indra\llwindow\llwindowwin32.h(182): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(182): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(242): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(242): error C2143: syntax error : missing ',' before '&'

What is totally flabbergasting is that between v1.26.5.0 (which compiles
fine) and v1.26.4.23, the diff is only 300Kb and NOTHING in it touches
the cmake files neither the llwindow/ files !!!
Plus, llwindowwin32.cpp (which also needs and includes llwindowwin32.h)
compiles just fine, unlike llwindow.cpp (and yes, I also tried to add
the same Windows includes in the latter than in the former, to no avail).

Finally, I tried on two different build systems (a WinXP SP3 virtual
machine and a genuine (non emulated) Windows 7 Ultimate system), to no
avail (not a build system issue, apparenetly, especially since v1.26.5.0
still compiles just fine).

Any clue of what is going wrong with this sh*tty VS2010 ?

Many thanks in advance !

Henri.



More information about the opensource-dev mailing list