私はYoctoで32ビット版のLinuxを使用しています。 2038年以降、タイムスタンプのサポートを追加したかったので、ローカル.conf
ファイルに以下を追加しました。
TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
TARGET_CPPFLAGS += "-D_TIME_BITS=64"
マニュアルによると、最初のフラグを使用して画像を構築するには2番目のフラグが必要ですglibc
。 glibcファイルの1つ(features-time64.h
)には、次のコードスニペットがあります。
#if defined _TIME_BITS
# if _TIME_BITS == 64
# if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
# error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
# elif __TIMESIZE == 32
# define __USE_TIME_BITS64 1
# endif
# elif _TIME_BITS == 32
# if __TIMESIZE > 32
# error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
# endif
# else
# error Invalid _TIME_BITS value (can only be 32 or 64-bit)
# endif
#endif
画像にはデフォルトでフラグが設定されたzlib
プログラムがあります。D_LARGEFILE64_SOURCE=1
コードzlib
(gzguts.h
)には次のコードがあります。
#ifdef _LARGEFILE64_SOURCE
# ifndef _LARGEFILE_SOURCE
# define _LARGEFILE_SOURCE 1
# endif
# ifdef _FILE_OFFSET_BITS
# undef _FILE_OFFSET_BITS
# endif
#endif
D_LARGEFILE64_SOURCE=1
、フラグが定義されなくなり、zlib
ファイルFILE_OFFSET_BITS
の上記のコードはfeatures_time.h
エラーを報告します。
_TIME_BITS=64 は、_FILE_OFFSET_BITS=64 の場合のみ許可されます。
したがって、イメージはzlib
ビルドしたくないため、ビルドされません。設定D_LARGEFILE64_SOURCE=1
とフラグを同時に設定できないのはなぜですか?D_FILE_OFFSET_BITS=64
どうすればこの問題を解決できますか?
答え1
Githubにはまだ未解決の問題があります。https://github.com/madler/zlib/issues/447
しかし、コメントで誰かがこの回避策について言及しました。
今日、長期サポートポイント「kirkstone」にイメージを構築する際に同じ問題が発生しました。