Sign in to follow this  

Side-By-Syde config invalid?

This topic is 2815 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello! We have a big problem with our engine! We've made a techdemo. (Compiled with VC++ Express 2008 on windows7(64-bit), .exe is 32-bit) Here: http://www.moddb.com/engines/wtech/downloads/1-techdemo-of-wtech And we've seen, that on any other PC than we get a Error message from windows! On our PCs everything just works fine... "The Side-By-Side Configuration is invalid" (Translated from german) We already tried to fix this with installing the VC++ 2008 redist-pack, as we read in some forums. THIS IS REALLY IMPORTANT! How can we fix this!? Please help us!

Share this post


Link to post
Share on other sites
Your exe seems to depend on the VS2008 debug runtime dll's. These are not installed by the redist-pack. Make a release build, or a debug build that links with the static (non-dll) debug runtime. You also have to make sure that any external libraries written in C++ that you link to match the build type & runtime you're using.

Share this post


Link to post
Share on other sites
Quote:
Original post by AgentC
Your exe seems to depend on the VS2008 debug runtime dll's. These are not installed by the redist-pack. Make a release build, or a debug build that links with the static (non-dll) debug runtime. You also have to make sure that any external libraries written in C++ that you link to match the build type & runtime you're using.


This means in particular that you should build your program and any external libraries against the same version of MSVCRT, which means you'll need to build them all not only with Visual Studio 2008, but with the same service pack of Visual Studio 2008 as well.

If you don't have source for external libraries and they were built with a different service pack than some libraries, then a) They must provide their own memory allocation / deallocation routines (i.e. if you call a library method that allocates memory internally and returns thismemory to you, they must also provide a method to free the memory. and b) When installing your app you must redistribute all necessary versions of the release runtime.

Share this post


Link to post
Share on other sites
Quote:
Original post by cache_hit
b) When installing your app you must redistribute all necessary versions of the release runtime.


You only need the latest one. Its config policy redirects all requests for older versions into loading the newest one. This explains how it works.

Edit: I mean you only need the most recent redist for each major version. If you have a library compiled against the VC2008 runtimes and one linked against the VC2008 SP1 runtimes, you only need the SP1 redist.

[Edited by - adeyblue on March 30, 2010 4:25:22 PM]

Share this post


Link to post
Share on other sites
If you open your compiled executable with Visual Studio, you should be able to see the embedded resources. One of these (RT_MANIFEST/1) is the application's manifest, which defines the dependendencies of the app.

Here is the relevant part of the manifest:

<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>



It requires a debug version of the CRT (name="Microsoft.VC90.DebugCRT"). Microsoft only allow the release versiond of the CRT to be redistributed, so you'll have to recompile your application in release mode and distribute it along with an installer that installs the CRT.

Here's a relevant page on the Microsoft website


Quote:
You only need the latest one. Its config policy redirects all requests for older versions into loading the newest one. This explains how it works.

Edit: I mean you only need the most recent redist for each major version. If you have a library compiled against the VC2008 runtimes and one linked against the VC2008 SP1 runtimes, you only need the SP1 redist.


That isn't quite right. There is no redirection from the 2008 CRT to the 2008 SP1 CRT - the redistributables installer just installs both versions. The redirection happens between different revision/build versions of the 2008 CRT and the 2008 SP1 CRT, but won't redirect an app with a manifest requiring the 2008 CRT to the 2008 SP1 CRT. For example it'll redirect an app requiring version 9.0.21022.8 (2008 no SP) of the CRT to an installed version of 9.0.30729.1 (again, 2008 no SP) but it won't redirect an app requiring 9.0.21022.8 (2008 no SP) to 9.1.XXXX.X (2008 SP1).

That doesn't make much difference if you use the redistributables installer - but you have to watch out for it if you deploy the CRT using the redistributable merge modules.

Share this post


Link to post
Share on other sites
Ok, thanks to everyone!

One more question: When I have 2 or three (I don't know) third party libs, which weren't built by me, do I have to ship the Redist installers for VC++ 2005, 2008 and 2008SP1 (just for an example)?

I think I have some libs which where built with VC++ 2008 without SP1...


And my next problem, which is about this thread, is here:
http://www.gamedev.net/community/forums/topic.asp?topic_id=566851

Share this post


Link to post
Share on other sites

This topic is 2815 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this