linux - 升级 glibc 后应用程序报告 “libc.so.6: cannot handle TLS data”

标签 linux upgrade glibc

背景信息:

Linux 操作系统:精简、简约且高度自定义(没有 apt-get、yum 等)

Linux 内核:2.6.19.1

当前 glibc 版本:2.3.6

目标 glibc 版本:2.6.1

问题:

正在尝试安装依赖于 glibc 版本 >= 2.6(当前版本为 2.3.6)的第 3 方提供的 ipk 包

第 3 方提供了不同的 ipk 包来将 glibc 升级到 2.6.1。执行软件包安装后,所有其他依赖 glibc 的应用程序报告“libc.so.6:无法处理 TLS 数据”

有人熟悉在不使用任何类型的包管理器支持的情况下在定制的 Linux 操作系统上升级 glibc 吗?

我的理解是 glibc 应该向后兼容并且升级它不应该导致以前运行的应用程序出现问题。这个假设不正确吗?

我可以根据要求发布更多信息。非常感谢任何和所有帮助,提前致谢。

最佳答案

My understanding is that glibc should be backwards compatible and upgrading it shouldn't cause issues with applications that had previously been working.

没错。

您的问题很可能是 ld-linuxlibc.so.6 不匹配的结果——它们必须来自相同的构建,会发生不好的事情(GLIBC 实际上由许多库组成,它们所有必须匹配)。

您的第 3 方提供的 glibc 包可能配置错误并替换了一个,但没有替换另一个。可能它将 libc.so.6 安装到 /usr/local/lib 而不是适合您的操作系统的任何位置。

因此在安装 3rd-party 更新之前找到所有“属于”GLIBC 的文件,并验证它们中的每一个都被它替换了。

也有可能(虽然可能性较小)第 3 方包已损坏,或配置为不支持 TLS。

如果您将应用程序链接到支持 TLS 的 GLIBC,然后将 GLIBC 升级到配置为不支持 TLS 的应用程序,应用程序中断。这是预期的并且是“正常的”(在没有 TLS 支持的情况下配置 GLIBC 根本不是一个好主意)。

关于linux - 升级 glibc 后应用程序报告 “libc.so.6: cannot handle TLS data”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750407/

相关文章:

c++ - 升级到VS2012后链接器报错的解决方法

c++ - 为什么不鼓励静态链接 glibc?

需要 Linux 脚本帮助

python - 在 Python 中找到 "home directory"?

android - 使用 Sqlite.net Pcl for Xamarin android 升级数据库

iphone - Xcode升级后报错: couldn't add 'com.apple.XcodeGenerated' tag

linux - awk或cut如何输出一个唯一列和其他列值的计数

linux - 用于在文件中搜索正则表达式模式的 Bash 工具

linux - 加载可执行文件或执行库

c - 为什么在 glibc 引用中测试 int 的符号被称为 "sloppy code"?