Page 1 of 1

VS express 2012: first attempt

Posted: Sat Oct 27, 2012 5:10 pm
by shenle
Still searching for a 100% free solution on Windows - trying VS express 2012, brand-spanking-new.

Checked out the latest svn (13420 I think), and set it to compile. It chokes on our version of boost:

Code: Select all

Error	1	error C1083: Cannot open include file: 'initializer_list': No such file or directory (..\..\vegastrike\boost\1_45\src\object\inheritance.cpp)	C:\games\vegastrike\vegastrike\boost\1_45\boost\unordered\unordered_set.hpp	27	1	vegastrike

Re: VS express 2012: first attempt

Posted: Sat Oct 27, 2012 7:56 pm
by loki1950
Hi shenle have you had a look at this http://forums.vega-strike.org/viewtopic.php?f=5&t=18051 thread,I managed to to get a running exe it's not trivial :wink:

Enjoy the Choice :)

Re: VS express 2012: first attempt

Posted: Sat Oct 27, 2012 8:18 pm
by shenle
Yes I did. I didn't see any problems related to boost there.

Re: VS express 2012: first attempt

Posted: Mon Oct 29, 2012 4:06 am
by pheonixstorm
How does VC 2012 look, haven't had a chance to test it out. Same as VC 2010 or did they change things around again.

Re: VS express 2012: first attempt

Posted: Mon Oct 29, 2012 7:53 am
by shenle
Of course it's different, it takes a little time to find things. They moved the whole side panel with source tree etc from the left to the right, but in general you can find things after a little while. The reason I'm testing it is: it's the current one and likely to be around for some time; also the compilers are supposed to be optimized/faster etc.

(edit) Going back to the error, after doing a bit of research it seems that for VS 2012 I need to put a

Code: Select all

#define BOOST_NO_0X_HDR_INITIALIZER_LIST
somewhere, preferably with a check for _MSC_VER = 1700

Not being an experienced programmer, I put it (for testing) just before the place where it's actually checked in vegastrike/boost/1_45/boost/unordered/unordered_set.hpp - currently recompiling to check if it solves the problem. Will likely take several hours on this slow machine. If it works, where should the #define be placed?


(edit2) With the following added at the top of unordered_set.hpp I got this to compile:

Code: Select all

#if (_MSC_VER >= 1700)
#define BOOST_NO_0X_HDR_INITIALIZER_LIST
#endif
(there was another error: cannot include afxres.h in resources.rc - which is an old issue, dating back several years; I thought it was resolved but it shows again; fixed by replacing afhres.h with WinResrc.h)

The compilation phase finishes, yet at linking the following shows up:

Code: Select all

1>glut32.lib(glut32.dll) : error LNK2026: module unsafe for SAFESEH image.
1>glut32.lib(glut32.dll) : error LNK2026: module unsafe for SAFESEH image.
1>glut32.lib(glut32.dll) : error LNK2026: module unsafe for SAFESEH image.
1>glut32.lib(glut32.dll) : error LNK2026: module unsafe for SAFESEH image.
1>glut32.lib(glut32.dll) : error LNK2026: module unsafe for SAFESEH image.
1>  libogg_static.lib(framing.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
1>     Creating library C:\games\vegastrike\vega-vc9\Release\vegastrike.lib and object C:\games\vegastrike\vega-vc9\Release\vegastrike.exp
1>star_system.obj : error LNK2001: unresolved external symbol "void __cdecl Occlusion::start(void)" (?start@Occlusion@@YAXXZ)
1>star_system.obj : error LNK2001: unresolved external symbol "void __cdecl Occlusion::end(void)" (?end@Occlusion@@YAXXZ)
1>unit.obj : error LNK2001: unresolved external symbol "void __cdecl Occlusion::addOccluder(class QVector const &,float,bool)" (?addOccluder@Occlusion@@YAXABVQVector@@M_N@Z)
1>gl_light_pick.obj : error LNK2001: unresolved external symbol "float __cdecl Occlusion::testOcclusion(class QVector const &,float,class QVector const &,float)" (?testOcclusion@Occlusion@@YAMABVQVector@@M0M@Z)
1>C:\games\vegastrike\vega-vc9\Release\vegastrike.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
I will try to compile my own freeglut and use it instead of the included one. Any other ideas?



(edit3)


With freeglut compiled with MSVS express 2012 replacing the glut32 included in svn, I get past the glut linking errors. Yet this remains:

Code: Select all

1>  libogg_static.lib(framing.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
1>     Creating library C:\games\vegastrike\vega-vc9\Release\vegastrike.lib and object C:\games\vegastrike\vega-vc9\Release\vegastrike.exp
1>star_system.obj : error LNK2001: unresolved external symbol "void __cdecl Occlusion::start(void)" (?start@Occlusion@@YAXXZ)
1>star_system.obj : error LNK2001: unresolved external symbol "void __cdecl Occlusion::end(void)" (?end@Occlusion@@YAXXZ)
1>unit.obj : error LNK2001: unresolved external symbol "void __cdecl Occlusion::addOccluder(class QVector const &,float,bool)" (?addOccluder@Occlusion@@YAXABVQVector@@M_N@Z)
1>gl_light_pick.obj : error LNK2001: unresolved external symbol "float __cdecl Occlusion::testOcclusion(class QVector const &,float,class QVector const &,float)" (?testOcclusion@Occlusion@@YAMABVQVector@@M0M@Z)
1>C:\games\vegastrike\vega-vc9\Release\vegastrike.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
I will stop for now. Please feel free to make suggestions.

(also, one final question. Why are we using the old glut 3.7 instead of freeglut?)

Re: VS express 2012: first attempt

Posted: Mon Oct 29, 2012 7:33 pm
by log0
I think you need to add src/gfx/occlusion.cpp to the project file.

http://vegastrike.svn.sourceforge.net/v ... w=revision

Re: VS express 2012: first attempt

Posted: Tue Oct 30, 2012 12:57 am
by shenle
log0 wrote:I think you need to add src/gfx/occlusion.cpp to the project file.

http://vegastrike.svn.sourceforge.net/v ... w=revision
Did that, and it solved the unresolved externals. For the linking to complete properly, I had to have 2 copies of the freeglut.lib available, one named freeglut.lib and the other one named glut32.lib (exact same library but with changed filename).

I got an executable, and it starts running but freezes during startup. I did have the freeglut.dll available in the win32/bin directory. Also stderr and stdout are blank, so I have nothing to report.

I tried replacing the glut32.dll from svn with a copy of freeglut.dll renamed (as for the libs) but it still freezes at the same point: "Loading cockpit/disabled/light ecm01.image" and no output to stderr or stdout.

Re: VS express 2012: first attempt

Posted: Tue Oct 30, 2012 5:48 am
by pheonixstorm
I don't think it is a glut issue but something else that keeps getting "fixed" every time I or others mess when the windows solution.. Been awhile so I don't recall the exact problem. Try checking my old threads when I was compiling the new VC9 solution to work with cubemaps etc.

I can't wait until we can eventually get all of the windows related nonsense fixed :(

Re: VS express 2012: first attempt

Posted: Tue Oct 30, 2012 9:49 am
by log0
shenle wrote:I got an executable, and it starts running but freezes during startup. I did have the freeglut.dll available in the win32/bin directory. Also stderr and stdout are blank, so I have nothing to report.

I tried replacing the glut32.dll from svn with a copy of freeglut.dll renamed (as for the libs) but it still freezes at the same point: "Loading cockpit/disabled/light ecm01.image" and no output to stderr or stdout.
You have to compile python27 with vs2012 as vegastrike is passing file pointers to the linked python lib and you will get a runtime conflict. I've looked into this some time ago, tried to replace the calls, but didn't get them all it seemed. So the only alternative was to recompile python.

Btw I think I've got it to compile with mingw(codeblocks) after a few changes, which might be an alternative to visual studio.

Re: VS express 2012: first attempt

Posted: Tue Oct 30, 2012 10:25 am
by shenle
Yes! That was it. I compiled python 2.7.3 with VSexp2012, and replaced the python27.dll in win32/bin with my new one. It works as expected. I didn't even have to recompile the binary - only replace the runtime library.

So now I have a binary that works, compiled with only free (beer) tools.

Still a few questions remain:
1. Where do I place #define BOOST_NO_0X_HDR_INITIALIZER_LIST - because modifying boost sources doesn't seem the right answer
2. why do we use the old glut instead of freeglut? recompiling glut with VS2012 is a much bigger hassle than doing the same for freeglut. Plus, the latest release of glut was 1998, whereas freeglut - 2012, with bugfixes.

Re: VS express 2012: first attempt

Posted: Tue Oct 30, 2012 11:00 am
by log0
Put BOOST_NO_0X_HDR_INITIALIZER_LIST into project preprocessor definitions(project properties->C/C++->Preprocessor) to avoid modifying the source code.

Re: VS express 2012: first attempt

Posted: Tue Oct 30, 2012 12:17 pm
by pheonixstorm
I have my branch using freeglut rather than glut but never change it in trunk as I never got a response back from anyone on testing. As far as the
(there was another error: cannot include afxres.h in resources.rc - which is an old issue, dating back several years; I thought it was resolved but it shows again; fixed by replacing afhres.h with WinResrc.h)
that was only fixed for VC9 with a patch in the VC9 folder. Since the solution is from the non express edition I did not apply the patch but DID mention that it would need to be done in the VC9 folder readme.