We are trying to create a program using FMOD and OpenGL in Visual Studio. When deploying to Windows XP, the following error occurs:
The procedure entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll
We put the exe in a folder with fmod dlls and other required dlls for OpenGL. The program runs fine on any Windows 7 machine, but fails to run on XP. We have tried compiling on both XP and 7, but it never runs on XP, except the machine we used to compile. (to clarify – works on all machines we have compiled on, 7 & XP, and works on all 7 machines)
It seems fmod is dependent upon a certain version of the msvcrt.dll, which must be different from other msvcrt dlls.
We’ve also tried linking with both static and dynamic runtime libraries – neither works.
Our project is due Friday, PLEASE HELP!!!!
- livewire1407 asked 7 years ago
so basically we are now using our windows 7 machines to compile and checking versions on windows 7 and have copied the dlls and manifests of the proper version and tested our exe on XP, which is continually giving us the error I posted in the first post
Yes, your issue with with CRT versions. This can be an absolute nightmare, I just had issues with this just last week while setting up my machine to build our tools.
CRT stands for C run-time libraries, these are included in windows and there are MANY different versions. Service packs and security updates often include new versions of the CRT. Some security updates will change which version of CRT visual studio uses.
For your program to run on any windows machine, that machine must have a version of the CRT that matches what the program was compiled with. To see which versions of the CRT are on a windows machine, take a look in C:\Windows\winsxs.
The FMOD dlls use a version of the CRT which is on every windows machine since win95 so you wont get any compatibility issues there.
To work out what CRT version the other dlls and your exe uses, you can open those files (the actual .exe and .dll files) in visual studio. (You cannot drag these files into VS, you have to go File->Open->File…)
Once the file is open, you should see a tree of items, expand the one "RT_MAINFEST". It should contain some binary data called "1 [English (United States)]", double click that. Now you should be able to see the binary data on the left side and on the right side you’ll see the human readable form. The CRT version is the part that says something like:
Inside your visual studio directory you can see what version of the CRT you are compiling with. For me this is:
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
Open the .manifest file in any text editor to see the version.
Now to make your program work on any windows computer, take the files in that directory (there should be one manifest file and 3 dlls). Copy them into the directory of your executable.
thats what I thought you meant. Thanks. we have version number from the exe, what do we do with that info? and what dlls should we check, msvcrt.dll or the ones we use with opengl or both? thanks again, you are being a tremendous help
are you referring to the xp computer we’ve compiled with? because we’ve pretty much put that away and the most recent compilations of our program have been made on a windows 7 machine and we have tried testing it on at least 2 xp machines, one in a school computer lab, and one on a separate laptop that has not been used at all for development (in fact I’m sure its never been coded on at all).
some of the forums we’ve found that seem to relate to our problem are:
http://us.generation-nt.com/answer/msvc … tml?page=1
http://stackoverflow.com/questions/1075 … assemblies
Please login first to submit.