首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

help:编译一个库时遇到了error请高手帮忙解决,3X!该如何处理

2012-03-09 
help:编译一个库时遇到了error请高手帮忙解决,3X!要编译一个库,有源代码和使用vc编译器和链接器的makefile

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__ */

热点排行