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()
、エラーを発生させずに受け入れます。これは、GCC がリンクに使用するライブラリの 1 つlibmoldname.a
( ) で定義されているためです。-lmoldname
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
ところで、に追加する必要はありません。GCC$LDFLAGS
はこのライブラリを自動的に追加します。