PRB: putchar Fails in C Code Called from FORTRAN ApplicationLast reviewed: August 7, 1997Article ID: Q118396 |
1.00 4.00
WINDOWS NT
kbtool
The information in this article applies to:
SYMPTOMSIn 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 CAUSEThis 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.
RESOLUTIONTo work around this problem, either
MORE INFORMATIONTo 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.OBJRun 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: FORTRANC Compile options needed: /MD
INTERFACE TO SUBROUTINE csub [C,ALIAS:'_csub']() END WRITE(*,*) 'In the main' CALL csub() END Sample Code: C
/* Compile options needed: /c */ #include <stdio.h> #include <string.h> #define DLLexport _declspec(dllexport) DLLexport void csub(); void csub() { printf("\nIn the dll\n"); putchar('c'); } |
Additional reference words: 1.00 4.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |