Community
cancel
Showing results for 
Search instead for 
Did you mean: 
jpharvey1981
Beginner
142 Views

files needed to run a fortran dll that uses some MKL procedures on a third party computer

Hi,

I recently compiled a dll using the Intel Visual Fortran compiler. This Dll uses some procedures of the MKL library.

I can sucessfullyused this dll in an *.exe built with delphi2010 using the loadlibrary procedure on the computer where the Visual Intel Fortran is installed.

When I try to run my *.exe on a third party computer on which Intel visual Fortran is not installed, the loadlibrary failed and my *.exe is not working properly.

Iused dumpbin.exeto see the dependencies of my dll and I got the following result:

libifcoremd.dll
libifportmd.dll
msvcr90.dll
mkl_intel_thread.dll
KERNEL32.dll


I know that many dll are not present on the third party computer and i tried to simply copy/paste those dll to see if I would be able to use my compiled DLL. This did not seem to work...


How can I proceed to do that?
0 Kudos
6 Replies
ArturGuzik
Valued Contributor I
142 Views

You might be missing some RTL from compiler and/or MKL. The easiest way is to get the redistributable packages (see this link for example) and install on 3rd party machine. There is similar for MKL (on Intel page). If the problem persists, please provide a bit more details on what's wrong, so somebody can come up with a help.

A.
jpharvey1981
Beginner
142 Views

I finally managed to use my *.exe by copy/paste all the dll included in the mkl\ia32\bin file.

I tried to install the above redistibutable Intel Fortran package but I cannot manage to use it properly. The intel dlls needed to run my application is not seen by my *.exe. DO I have to add an option upon the compilation of my fortran dll in order to use, on a third party computer, the redistributable package (ex.: a dependency optionin the visual studio interface to tell the dllto lookin the environment path)?

The Intel Fortran dll needed to run my application are on the third party computer in the following floder:

C:\Program Files (x86)\Common Files\Intel\Shared Files\fortran\Bin

This path is also include in the environment of the third party computer.

When I execute my program,my Fortran DLL is loaded but cannot find the other Intel Fortran dlls if those dlls are not in the same folder as my Fortran dll.

ArturGuzik
Valued Contributor I
142 Views

(1) it looks as if you're having the system path related issues. See this link to find the order in which Windows searches for dlls while running/loading program. You just need to ensure that Windows can find all your dlls in one of these places.

(2) why redistributable package doesn't work?

(2a) you need(ed) the redistrubutable package for MKl. The link I gave in the previous post was for compiler only. Your program depends also on MKL, so that's why you need(ed) them.

(3) did you build your dll in realese mode? Please note, that debug version(s) are not redistributable, in that sense, that IVF license doesn't allow you to distribute debug (compiler rtl) dlls.


A.
jpharvey1981
Beginner
142 Views

First here are the answers to your questions:

2) I said that I am not able to manage how to use properly the redistributable package. I went in the share folder of the third party computer where the redistributable package was installed and Icopy/paste all its content to the folder where my fortran dll and my *.exewere installed on this computer and I partially solved the problem.

2a) I mentioned previously that I added all needed dlls of mkl in an appropriate folder on the third party computer. It seems like mkldoes not have a redistributable package like the Intel Fortran compiler.

3) I built my dll in release mode.



Here is my question:

Is there an option in the microsoft visual studio environement where I can tell to the Fortran compiler that I want my dll to look in the environment path. The fortrandll is working properly on the computer where I have the Intel Fortran compiler installed but cannot find the Intel Fortran dlls on a third party computer when those dlls are not included in the same folder as my *.exe and my Fortran.Dll. (like I said, I managed to use my *.exe on a third party computer)

Thank you for your help!

mecej4
Black Belt
142 Views

Just to confirm a suspicion:

If you want the Intel and MKL redistributable DLLs to reside in a directory whose path is IMKLPATH, for example:

IMKLPATH=C:\Program Files (x86)\Common Files\Intel\Shared Files\fortran\Bin

then, on your client's computer, all the following conditions must be satisfied

1. The %IMKLPATH% directory must exist
2. That directory must contain the necessary IVF and MKL DLLs
3. The user's execution path must have %IMKLPATH% included in it
4. The user must have appropriate access permissions to the directory and the files contained it.

5. The DLLs should be approved for redistribution by Intel, and any necessary licenses/license managers must be present.

After checking for these requirements, if you still run into errors, please report the error messages exactly as you see them, and provide sufficient details to enable someone here to reproduce the error.
jpharvey1981
Beginner
142 Views

Thanks for the tips !

A simple Windows 7 reboot did the job!

It seems like my third party computer was not considering the new environment path installed after the execution of the redistributable package of IVF. I did not thought about rebooting the computer since a cmd.exe execution confirmed me that the new path was present on the computer...

I was not able to finda redistributable package for mkl... anyone?

And by the way, the third party computer is my computer (new quadcore computer freshly bought)where I can ultimately install the Intel Fortran compiler. So no worries for the "legalness" of my work.

Reply