首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标志D_FILE_OFFSET_BITS与D_LARGEFILE64_SOURCE的关系

标志D_FILE_OFFSET_BITS与D_LARGEFILE64_SOURCE的关系
EN

Unix & Linux用户
提问于 2022-02-28 09:00:20
回答 1查看 366关注 0票数 2

我正在使用Yocto中Linux构建的32位版本。我想在2038年之后添加对时间戳的支持,所以我在本地.conf文件中添加了:

代码语言:javascript
运行
复制
TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
TARGET_CPPFLAGS += "-D_TIME_BITS=64"

根据glibc手册,第二个标志是用第一个标志构建图像所必需的。在一个glibc文件(features-time64.h)中,有以下代码片段:

代码语言:javascript
运行
复制
#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):

代码语言:javascript
运行
复制
#ifdef _LARGEFILE64_SOURCE
#  ifndef _LARGEFILE_SOURCE
#    define _LARGEFILE_SOURCE 1
#  endif
#  ifdef _FILE_OFFSET_BITS
#    undef _FILE_OFFSET_BITS
#  endif
#endif

默认标志D_LARGEFILE64_SOURCE=1zlib中,导致取消定义FILE_OFFSET_BITS标志,而上面从features_time.h文件中的代码报告了一个错误:

_TIME_BITS=64只允许与_FILE_OFFSET_BITS=64一起使用

所以图像不会生成,因为zlib不想构建。为什么不能同时设置D_LARGEFILE64_SOURCE=1D_FILE_OFFSET_BITS=64标志?

EN

回答 1

Unix & Linux用户

发布于 2023-04-24 11:02:16

仍然有一个悬而未决的问题是:https://github.com/madler/zlib/issues/447

但在评论中有人提到了这样的解决办法:

https://stackoverflow.com/questions/72801397/glibc-build-with-flags-file-offset-bits-64-and-time-bits-64-fails/72854884#72854884

今天,当我在长期支持部门"kirkstone“上建立一个形象时,我也谈到了同样的问题。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/692377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档