Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29277 Discussions

libmmd.ddl problem after moving from IA32 to EM64T host

newfortranuser
Beginner
1,483 Views
Hi. I have found posts which seem related but not quite like what I'm seeing.

Here's the situation. I have been happily using a WinXP32 box to develop for years. Now I have moved to a WinXP64 box. Please don;t tell me why this is a bad idea. It is driven by inscrutible customer requirements, which are not required to make sense.

I have a large mixed language application built using Visual Studio 2005 SP1 and IVF 10.1.30. I am using Microsoft's C++ compiler.

On my WinXP32 build system, I can target both x32 and EM64T targets, iin both debug and release. Compile and link. They run on their intended targets.

Then I made a backup of my solution/project files.

Then I moved my whole setup to a WinXP64 build system. Installed VS 2005 SP1 and IVF 10.1.30 and copied over my solution/project files.

All targets compile and link. The x32 Release target runs, but the x32 Debug target does not run. Instead, the x32 Debug target terminates on startup with a message stating that it cannot find libmmd.dll. This seems odd. I thought that was the release version of the mathlib. Ok, I copy it to the executable's directory, but still not good. On a hunch, I added %IFORT_COMPILER10%\IA32\Lib to the system path (which already has %IFORT_COMPILER10%\EM64T\Lib). Now it works!

I also noticed that in Tools...Options...Intel Fortran, the win32 settings and the win64 Bin paths both point to %IFORT_COMPILER10%\EM64T\Lib and neither points to %IFORT_COMPILER10%\IA32\Lib. Changing that and restarting visual studio did not seem to have any effect...

I have not installed the Visual Studio x32 redistributables. I'm not sure that's relevant here?

Clearly there is a lot I do not understand about moving from my old familiar Win32 machine to my new Win64 machine. I will appreciate any help, including advice to R(specific sections of)TFM.

I am willing to work hard on his. All I need is a push. Thanks!

0 Kudos
1 Solution
Steven_L_Intel1
Employee
1,483 Views

On x64 systems, you can have both 32-bit and 64-bit DLLs in PATH and Windows will pick the right one. We did not realize this for a while - and I'll take the blame for it - so the installer did not, for a while, add both, but it does now.

I don't think libmmdd.dll is used for anything anymore. It is there for historical reasons.

View solution in original post

0 Kudos
4 Replies
Steven_L_Intel1
Employee
1,483 Views

Add the IA32LIB folder to PATH as well.
0 Kudos
newfortranuser
Beginner
1,483 Views

Add the IA32LIB folder to PATH as well.

Thank you, Steve. I'm sorry if I am being dense, but as I mentioned I added %IFORT_COMPILER10%IA32Lib to my system PATH environemnt variable. That got my program to run. Or do you mean a different IA32LIB ot a different PATH variable than the ones I am talking about?

The funny thing is, I do not recall ever having to do this on my WinXP32 machine.

And isn't libmmd.dll the Release lib? Seems odd that I would need that in Debug, since there is also a libmmdd.dll.

Again, my Release build works fine, with ouyt tinkering with any Paths.

And why does dropping the libs into my program's folder not work for this x32 app on an Win64 host, whereas dropping the libs into the program bin filder worked fine on Win32.

I realize I am asking a lot of basic questions. I guess there's a lot that just worked on Win32 that is trickier on Win64. I'm willing to do the work, and I need to understand the why as well as the how.

Thanks again!


0 Kudos
Steven_L_Intel1
Employee
1,484 Views

On x64 systems, you can have both 32-bit and 64-bit DLLs in PATH and Windows will pick the right one. We did not realize this for a while - and I'll take the blame for it - so the installer did not, for a while, add both, but it does now.

I don't think libmmdd.dll is used for anything anymore. It is there for historical reasons.
0 Kudos
newfortranuser
Beginner
1,483 Views

On x64 systems, you can have both 32-bit and 64-bit DLLs in PATH and Windows will pick the right one. We did not realize this for a while - and I'll take the blame for it - so the installer did not, for a while, add both, but it does now.

I don't think libmmdd.dll is used for anything anymore. It is there for historical reasons.

Ok, Steve. I don't need anyone to take any blame. I'm just happy to be making progress.

It makes sense (in hindsight) that Win64 can pick the correct lib, since the decorations are different for x64. Good.

I will try removing libmmdd.dll (and libmmdd.lib) from both my x32 and x64 builds. Believe it or not, IVF is the simplest of my project dependencies. Anything I can eliminate is good!

After that, my next task will be understanding how to deploy. I got used to being able to copy IVF DLL's into my exe $OutputDir on Win32 and having everything work (in development; I would never deploy that way of course) but I guess Win64 is different and I have some things to learn.

Thanks for clearing up a lot of my questions so quickly!

0 Kudos
Reply