ID: Q118396
1.00 4.00 WINDOWS NT kbtool
The information in this article applies to:
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
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.
To work around this problem, either
-or-
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.
C Compile options needed: /MD
INTERFACE TO SUBROUTINE csub [C,ALIAS:'_csub']()
END
WRITE(*,*) 'In the main'
CALL csub()
END
/* 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
KBCategory: kbtool kbprb
KBSubcategory: FL32Iss
Keywords : kbCompiler kbFL32 kbFortranPS
Version : 1.00 4.00
Platform : NT WINDOWS
Last Reviewed: August 9, 1997