2013年10月27日日曜日

64bitファイル対応に関して

最近のOSやプラットフォームでは64bitのファイルシステムが当たり前となっていますが、C言語(gcc/g++)においてそれがいつからサポートされているのかは開発環境のアップデートやら何やらをひと通り準備してからでないといけなくなります。

つい最近、Android にて 2G 以上のファイルが対応できない壁にぶち当たりちょっと気になっているところです。

Android/NDK での対応:現状サポートされていない
・SD が FAT32 フォーマット
・libc が 64bit をサポートしていない

Windows での 64bit 対応:
fseek/_fseeki64:VC++ にて利用可能

OSX や Linux での対応:
FSEEKO:コンパイラ等に -D_FILE_OFFSET_BITS=64 を指定して利用可能

一方、Snow Leopard 64bit で下記のソースを実行すると、コンパイラに何も指定しなくても普通にシークはできています(off_t のサイズも64bitになっています)。 実行結果: 私の環境では(Snow Leopard 64bit/Xcode 4.2)、lseek64/llseek/_llseek 等がサポートされていないのですが、XCode をインストールした際に 64bit 対応としてくれているのかもしれません。

LSEEK64 のページによると、
関数 lseek64() は glibc 2.1 以降で使用可能であり、 llseek() のエイリアスとして定義されている。
とあるので gcc 側の対応としてはそちらが正解なのでしょうが、Apple が 64bit に対応した gcc をインストールしてくれていると言うことになるんでしょうかね??

一応 MacPorts での gcc/glibc 等のアップデート方法を試みたのですが、libgcc のインストールにてコケてしまいあえなく中断・・現行のままで利用可能と言うことにしておきましょう。

0 件のコメント:

コメントを投稿