PRB: putchar Fails in C Code Called from FORTRAN Application

ID: Q118396


The information in this article applies to:
  • Microsoft Fortran Powerstation 32 for Windows NT, versions 1.0, 4.0


SYMPTOMS

In a mixed-language program, compiling the FORTRAN code using the /MD option prevents the C Run Time function "putchar" from operating.

For Fortran PowerStation 4.0, the following warning message is generated:

LINK: warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library


CAUSE

This behavior is by design. You cannot safely mix objects built for different program execution models. In this case, putchar('c') is a macro that expands to putc(c,stdout) and stdout is defined differently in MSVCRT.LIB than it is in the statically linked libraries.


RESOLUTION

To work around this problem, either

  • Use the /MD option on the C code as well.


  • -or-
  • Compile the Fortran code using /MT instead of using /MD.



MORE INFORMATION

To generate the problem, compile the C code using Visual C++ 32-bit Edition and compile the FORTRAN program using option /MD. Include the C object module on the compile line so that it is passed to the linker. The command lines used are as follows:


   CL -c C_SAMPLE.C
   FL32 -MD F_SAMPLE.FOR C_SAMPLE.OBJ 
Run the sample code. It fails to display the letter "c" after "in the dll".

The program will run without error if the FORTRAN program is compiled using the /MT option instead of the /MD option.

Sample Code: FORTRAN


C Compile options needed: /MD

      INTERFACE TO SUBROUTINE csub [C,ALIAS:'_csub']()
      END
      WRITE(*,*) 'In the main'
      CALL csub()
      END 

Sample Code: C

 
    #include <stdio.h>
   #include <string.h>

   #define DLLexport _declspec(dllexport)

   DLLexport void csub();
   void csub()
   {
      printf("\nIn the dll\n");
      putchar('c');
   } 

Additional query words: visualc 1.00 4.00

Keywords : kbCompiler kbFL32 kbFortranPS
Version : :1.0,4.0
Platform : NT WINDOWS
Issue type :


Last Reviewed: November 2, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.