首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有标志_FILE_OFFSET_BITS=64和_TIME_BITS=64的glibc构建失败

带有标志_FILE_OFFSET_BITS=64和_TIME_BITS=64的glibc构建失败
EN

Stack Overflow用户
提问于 2022-06-29 12:24:16
回答 1查看 175关注 0票数 0

我想做的是在glibc中修复Y2038问题。我在Ubuntu18.04VM中使用buildroot2022.02.2对32位ARM CPU进行交叉编译。我读到了添加额外标志_FILE_OFFSET_BITS=64和_TIME_BITS=64应该可以做到这一点,但是我得到了这样的构建错误

/tmp/cclzLgs6.s:汇编程序消息: /tmp/cclzLgs6.s:138: Error:符号`__sigtimedwait64‘已经定义

对Y2038问题的支持是在2.34中提供的,还是在进行中?或者我做错了什么,比如丢了一些旗子?

谢谢你,卡特林

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-04 09:57:07

您可以执行以下操作以获得一个Y2038安全内置32位ARM系统:

  1. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads使用预编译的ARM工具链.版本11.2-2022.02由GCC 11.2和glibc 2.34组成.( _TIME_BITS=64选项是在glibc 2.34中引入的)
  2. 使用的是版本>= 5.1的Linux内核。https://sourceware.org/pipermail/libc-alpha/2021-August/129718.html说,完全支持64位时间需要5.1。
  3. 曾试图在https://github.com/buildroot/buildroot/commit/6e33e5908086a511294296f317f6e6f86fa84b1d的buildroot中启用系统范围的_TIME_BITS=64,但后来由于无法构建一些软件包而在https://github.com/buildroot/buildroot/commit/dd170f0cbad729dba4193b2b20e3de0a7010d485中恢复。您仍然应该做的是根据第一个补丁添加_TIME_BITS=64。
  4. 您可能会得到一些未定义_FILE_OFFSET_BITS的包(特别是zlib包)的构建错误,以及在代码中嵌入zlib的包。这里的一个简单的解决方法是修改这些包中的代码,以便在_TIME_BITS未定义时也可以卸载_FILE_OFFSET_BITS。在我看过的所有情况下,这似乎都有效,因为受影响的编译单元无论如何都不使用任何时间函数。

例如,将此修补程序作为0002时位补丁放在buildroot/package/libzlib/:

代码语言:javascript
运行
复制
--- a/gzguts.h
+++ b/gzguts.h
@@ -9,6 +9,7 @@
 #  endif
 #  ifdef _FILE_OFFSET_BITS
 #    undef _FILE_OFFSET_BITS
+#    undef _TIME_BITS
 #  endif
 #endif

这是必需的,因为glibc头中有一个断言在_TIME_BITS为64但_FILE_OFFSET_BITS不是64时出现错误。

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

https://stackoverflow.com/questions/72801397

复制
相关文章

相似问题

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