Strange error message under VS2010 - function reference does not mathc function definition

Strange error message under VS2010 - function reference does not mathc function definition


I have a rather curious problem running Intel Fortran 12.1 under VS2010. My code looks essentially like this:

program xx
    implicit none

    logical, external :: modelinitialize

    logical           :: success

    success = ModelInitialize()
end program xx

When I compile the actual source under VS2010 (as part of a much larger project/solution), I get the error message:

error #7977: The type of the function reference does not match the type of the function definition.   [MODELINITIALIZE]
        success = ModelInitialize()

(as the routine needs to be callable from Java, it is not contained in a module)

If I compile the source outside of VS2010 with the same compile options, this problem does not occur. None of my colleagues working on the same project see this problem. Even creating a new project with just this file does not give any compil problem.

What can be the matter?

7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

The names differ as to case (upper/lower/combination). Do you have directives that affect the case of external symbols? Perhaps to make the function work with Java, which is a language that honors case?

No, just the standard ones - nothing that I can think of. Besides if case sensitivity were enabled, then wouldn't the two occurrences
be seen as two entirely different routines/functions?

Shouldn't you show us where ModelInitialize is defined so we can see what the compiler is expecting its interface to be?

Well, that is in the top part of the file:

logical, external :: ModelInitialize

It is a more modern version of the FORTRAN 77 way of dealing with external functions (modern, because of the combination
into one statement)

In Visual Studio you get generated interface checking. The compiler is then noticing that the actual function is declared as returning a type other than LOGICAL. You need to show us the called routine.

Steve - Intel Developer Support


you are absolutely right! The source file containing the function ModelInitialize defines it as an integer function (because of the Java
connection). Stupid blind spot - I had all but forgotten these automatically generated interfaces.

Well, easy to fix.

Thanks very much,


Leave a Comment

Please sign in to add a comment. Not a member? Join today