help:编译一个库时遇到了error请高手帮忙解决,3X!该如何处理
help:编译一个库时遇到了error请高手帮忙解决,3X!
要编译一个库,有源代码和使用vc编译器和链接器的makefile。
原makefile使用/ML编译器选项,在命令行中执行nmake一切OK。
但是如果我修改makefile使用/MD编译器选项,编译到文件inquire.c总出现这个错误C:\PROGRA~1\MICROS~4\VC98\INCLUDE\io.h(234) : error C2375: 'isatty ' :redefinition; different linkage
文件inquire.c中有“#include "io.h ";”语句
所以我想出这个错误的原因是不是io.h所对应的标准库与/MD所对应的标准库MSVCRT不兼容的原因?MSVCRT库有头文件能替代io.h否?
我一定要用/MD选项才编译这个库才能在我的project中使用,怎样才能解决这个问题呢?
------解决方案--------------------
选择/MD后,将同时使用标准库LIBCMT.LIB(_MT)和MSVCRT.LIB(_DLL)。而这两个库中都有一个_isatty函数,对应的在io.h中有2处:
_CRTIMP int __cdecl _isatty(int);
_CRTIMP int __cdecl isatty(int);
一般只有前者其作用,后者只在没有宏定义__STDC__时起作用。
你的错误提示正好是指向后者,说明你的makefile没有定义__STDC__,定义它试试。
__STDC__为兼容性而设,就如io.h中的:
#if !__STDC__
/* Non-ANSI names for compatibility */
...
_CRTIMP int __cdecl isatty(int);
...
#endif /* __STDC__ */
要编译一个库,有源代码和使用vc编译器和链接器的makefile。
原makefile使用/ML编译器选项,在命令行中执行nmake一切OK。
但是如果我修改makefile使用/MD编译器选项,编译到文件inquire.c总出现这个错误C:\PROGRA~1\MICROS~4\VC98\INCLUDE\io.h(234) : error C2375: 'isatty ' :redefinition; different linkage
文件inquire.c中有“#include "io.h ";”语句
所以我想出这个错误的原因是不是io.h所对应的标准库与/MD所对应的标准库MSVCRT不兼容的原因?MSVCRT库有头文件能替代io.h否?
我一定要用/MD选项才编译这个库才能在我的project中使用,怎样才能解决这个问题呢?
------解决方案--------------------
选择/MD后,将同时使用标准库LIBCMT.LIB(_MT)和MSVCRT.LIB(_DLL)。而这两个库中都有一个_isatty函数,对应的在io.h中有2处:
_CRTIMP int __cdecl _isatty(int);
_CRTIMP int __cdecl isatty(int);
一般只有前者其作用,后者只在没有宏定义__STDC__时起作用。
你的错误提示正好是指向后者,说明你的makefile没有定义__STDC__,定义它试试。
__STDC__为兼容性而设,就如io.h中的:
#if !__STDC__
/* Non-ANSI names for compatibility */
...
_CRTIMP int __cdecl isatty(int);
...
#endif /* __STDC__ */