Microsoft KB Archive/118396

= PRB: putchar Fails in C Code Called from FORTRAN Application =

Article ID: 118396

Article Last Modified on 10/17/2003

-

APPLIES TO


 * Microsoft FORTRAN PowerStation 32
 * Microsoft FORTRAN PowerStation 32

-



This article was previously published under Q118396



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   #include 

#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 KB118396

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.