Installation of the MQSeries module normnally requires the steps
perl Makefile.PL make make test make install
However, if you are using Visual C++ 8.0 (Visual Studio 2005 or later), while your version of perl was built with an earlier release of Visual C++, you may need to perform additional tasks after the "make" step. The symptoms you'll see is that, when perl tries to load the MQSeries DLL, it cannot find the C runtime library, MSVCR80.dll.
When you build an application or DLL with Microsoft VC 8.0 you require the C runtime library, MSVCR80.dll.
With previous releases of Visual C++ the corresponding DLL would either be added to the search path or installed in C:\windows\system32. Visual C++ 8.0 supports multiple versions of these libraries and no longer allows you to add them to the search path; instead, the libraries are installed in the Side-by-Side (SxS) directory and accessed by their UUID.
dir C:\WINDOWS\WinSxS Volume in drive C has no label. Volume Serial Number is 64C5-B42B Directory of C:\WINDOWS\WinSxS 11/01/2008 22:24 <DIR> . 11/01/2008 22:24 <DIR> .. 08/10/2007 19:23 <DIR> InstallTemp 11/01/2008 22:24 <DIR> Manifests 08/10/2007 18:49 <DIR> Policies 08/10/2007 18:49 <DIR> x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_6e805841 10/10/2007 08:50 <DIR> x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_cbb27474 08/10/2007 18:49 <DIR> x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd 10/10/2007 08:50 <DIR> x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 08/10/2007 18:49 <DIR> x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0 10/10/2007 08:50 <DIR> x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_91481303 08/10/2007 18:49 <DIR> x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_dec6ddd2 10/10/2007 08:50 <DIR> x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05
If you look in one of these directories, you'll see the DLL:
dir C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd Volume in drive C has no label. Volume Serial Number is 64C5-B42B Directory of C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd 08/10/2007 18:49 <DIR> . 08/10/2007 18:49 <DIR> .. 22/09/2005 22:48 479,232 msvcm80.dll 22/09/2005 22:48 548,864 msvcp80.dll 22/09/2005 22:48 626,688 msvcr80.dll
Adding the relevant SxS directory to the search path won't help - the program loader will not load the MQSeries DLL. The only way to access the versioned MSVCR80.DLL is by creating a manifest file.
The manifest file must be called MQSeries.dll.manifest and have a content like the one below (you will have to adjust the UUID to match your system):
<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency> </assembly>
We have had reports that the manifest file can be stored in the same directory as the perl binary or the same directory as the MQSeries DLL, but ideally it should be embedded into the MQSeries DLL.
This latter step is performed using
These manifest issues only occur when both Visual C++ 8 and an earlier release are used to build different components of your system. If both perl and the MQSeries package are compiled with either Visual C++ 8 or an earlier release, you will not have any issue; but if perl itself is built using Visual C++ 7 and you try to build the MQSeries extension using Visual C++ 8, then you have to create the manifest file and embed it into MQSeries.dll using