I have recently transferred a small suite of working Fortran programs to an MSc student's laptop, he is running Windows 10 and none of the programs executed until he had installed the relevant Intel redistributables, at which point all the programs worked except one.
The student is running a Chinese version of Windows 10 and there are just 2 parts of the error message I can read: one is the program of origin, which is indeed one of the programs I gave him, and the other is "for_alloc_pdtlen"
So far I have checked the following (in order of increasing desperation)
1) None of my programs have a variable such as "for_alloc_pdtlen" or "pdtlen" etc
2) "for_alloc_pdtlen" is not even a Googlewhack
3) Every allocate statement in the whole program has a "stat=" clause, so I am not expecting an allocation problem, and the student laptop seems to have more than enough memory
4) The Intel Dev Zone search returns nothing for "for_alloc_pdtlen"
Does anyone have any idea how I should proceed?
Is there any chance that some of the characters of this message have been macerated in translation and I have been looking in the wrong place?
As usual with MSc projects, time is of the essence.
Thanks in anticipation
That looks like a routine in one of the runtime libraries. They are not accessible via ordinary Fortran code - instead they come in during the compilation and linking stages. My suspicion is that the runtime libraries on the machine of your sudent are not compatible with the ones belonging to the compiler you used to build the programs. The solution would then be: supply them the appropriate runtime libraries.
It is a run time error, I have not given the student the source code. According to the student no part of this program appears to execute.
Quite literally all I have to go on is the attached screen shot - hence my question is more about the tactics of problem solving, than actually expecting a fix (although if anyone has a fix, do not be shy...)
My knowledge of Chinese is limited to a handful of characters, but I have several Chinese colleagues. The screen shot really looks like a message about a missing entry point and the colleague I asked translated the message as "can not locate the codes entry point for_alloc_pdtlen, at dynamic link base(or library)"
The call to routine for_alloc_pdtlen is, in fact, one that is generated by the compiler to support parameterized derived types.
The problem you're seeing can be caused by the student having an older version of the redistributables than you used to create the working programs.
Please make sure that the redistributables are at least as new as the version of Intel Fortran that you used to build the program. The redistributables can be newer (we always strive for backwards compatibility) but cannot be older.
Another solution could be to build your program using static libraries instead of dynamic libraries. This will make your executable larger, but will ensure that the correct version of the routines are available to your users.
From my source code perspective, I do use my own static libraries, and they do make the executables bigger, but I did not know I could do this with the Fortran system libraries, I am guessing there is a combination of compiler and/or linker flags... or do I just add the relevant .lib files to my project just as I add my own static libraries, in which case, how do I know which are required and/or where they are stored?
(I am using VS Enterprise 2017, and Intel(R) Visual Fortran Compiler 184.108.40.2064 [Intel(R) 64] in case that makes a difference)
This sounds like a really neat solution.
Thanks in anticipation,