MinGW 发行版也会出现同样的问题。如http://pubs.opengroup.org/onlinepubs/009696699/basedefs/ctype.h.html中所示,isascii()
定义<ctype.h>
为 ISO C 标准的扩展。因此,没有必要可用。如上所述,不推荐使用不带下划线的名称,从 Visual C++ 2005 运行时库开始(安装较旧的 MSVCRT 运行时将无济于事)。
因此,使用__isascii()
变体是正确的。
但是,使用 GCC 4.6.1 的旧版 MinGW 运行时安装可以接受isascii()
而不会出现错误。这是因为它是在libmoldname.a
( -lmoldname
) 中定义的——GCC 用于链接的库之一。在最近的 MinGW 版本中,libmoldname.a
已更改以删除一些旧功能,包括isascii()
. isascii.o
已从此库中删除了一个目标文件。这些链接与此删除有关:
sourceforge.net/apps/trac/mingw-w64/changeset/5807/trunk
sourceforge.net/p/mingw-w64/mailman/mingw-w64-public/thread/51751223.2020804@videolan.org/
http://marc.info/?l=mingw-patches&m=107980328623432
不幸的是,<ctype.h>
仍然isascii()
没有下划线定义。因此,此错误仅出现在链接阶段。
如果出于某种原因无法更改代码,请使用旧版本的 MinGW 或 Cygwin 进行构建。要检查发行版是否支持isascii()
类型:
objdump -t c:/mingw/lib/libmoldname.a | grep "isascii"
输出应为空(不支持)或:
isascii.o: file format pe-i386
[ 0](sec -2)(fl 0x00)(ty 0)(scl 103) (nx 1) 0x00000000 isascii.c
[ 2](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 1) 0x00000000 _isascii
顺便说一句,不需要添加-lmoldname
,$LDFLAGS
GCC会自动添加这个库。