저는 Yocto에서 32비트 버전의 Linux를 사용하고 있습니다. 2038년 이후 타임스탬프에 대한 지원을 추가하고 싶었기 때문에 로컬 .conf
파일에 다음을 추가했습니다.
TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
TARGET_CPPFLAGS += "-D_TIME_BITS=64"
매뉴얼에 따르면 첫 번째 플래그를 사용하여 이미지를 빌드하려면 두 번째 플래그가 필요합니다 glibc
. glibc 파일 중 하나( 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"에 이미지를 구축하는 동안 동일한 문제가 발생했습니다.