- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我管理一个综合体 C++ project
我收到现场报告说在一个系统上构建的二进制文件不能在另一个系统上运行系统因为 glibc 版本不匹配。
我只是想验证一下:二进制文件需要的glibc版本是否完全由编译时使用的g++版本决定?
在这种情况下,二进制文件是用 g++ 11 构建的,并在另一个没有安装 g++ 11 的系统上运行。
最佳答案
I just want to verify: is the version of glibc required by the binary completely determined by which version of g++ is used to compile it?
一点也不。运行时所需的 GLIBC 版本由几个因素决定:
In this case, the binary is built with g++ 11
您可以安装g++-11
在具有 GLIBC-2.15 的系统和具有 GLIBC-2.31 的系统上。对于非平凡的源代码,生成的二进制文件在运行时可能对 GLIBC 有不同的要求。
参见 this answer了解符号版本控制是如何发挥作用的。
TL;DR:如果您想构建可移植到不同 Linux 发行版的可执行文件或共享库,请选择您愿意支持的最旧 GLIBC 版本,并在系统上构建使用该版本(您不必为此拥有物理机器——VM 或 docker 容器工作查找)。
由于向后兼容性保证,您的二进制文件将在具有相同或更新版本的 GLIBC 的所有系统上运行。
更新:
假设您构建了 libfoo.a
在 GLIBC-NN 上,最终用户链接 a.out
在 GLIBC-MM 上,其中 MM < NN
.
这是一种非常危险的做法:程序可能会悄无声息地破坏它的数据,找到这种破坏的根本原因将非常困难。
现在假设最终用户链接a.out
在 GLIBC-MM 上 NN <= MM
(根据评论,这是实际情况),然后运行 a.out
在带有 GLIBC-JJ 的系统上,其中 JJ < NN
.
在那种情况下,“无声”损坏的可能性会降到最低,但不会完全消除。
考虑以下假设示例(foo()
是您提供的 libfoo.a
的一部分):
struct passwd *foo()
{
struct passwd *pw = getpwuid(42);
if (pw->field_a == 123) // 1
pw->field_a = 1234; // 2
return pw;
}
现在假设在 GLIBC-NN 中 field_a
作为 struct passwd
的一部分存在,但在 GLIBC-JJ 中却没有。在这种情况下,点 1
上面的程序可能会读取已分配缓冲区的末尾,并在点 2
处读取。它可能写到最后。
注意:上面的程序已经违反了“应用程序不得修改返回值指向的结构”的要求,因此无论如何都有未定义的行为;这只是 GLIBC 不匹配可能如何产生错误的示例。
关于c++ - 哪些因素决定了用 g++ 构建的二进制文件需要哪个版本的 glibc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68591739/
The proper divisors of a positive integer, n, are all the positive integers that divide n evenly oth
我有这个命令行 $ sudo find /etc/grub.d | sort | tail -n 1 | xargs sudo cat | wc 我想用一个 sudo 命令执行 $ sudo --so
选项大小策略和拉伸(stretch)因子如何影响小部件的大小? 下图显示了三个不同排列的窗口的预览。对于所有三个窗口 (W1-W3),右侧的小部件是一个 QFrame 小部件,其水平和垂直大小策略设置
每次当我必须重新编码一组变量时,我都会想到 SPSS 重新编码功能。我必须承认这很简单。有一个类似的recode函数在 car包,它可以解决问题,但让我们假设我想用 factor 完成任务. 我有 d
这个问题在这里已经有了答案: Template issue causes linker error (C++) [duplicate] (6 个答案) 关闭 9 年前。 我的问题查了没用所以特地来问
我想使用 Eigen 来计算稀疏矩阵的 cholesky 分解。但是,结果不正确,我找不到原因。我如何获得正确答案? Eigen 中是否实现了特殊例程,利用稀疏矩阵的结构来提高性能(例如,对于下例中的
我正在尝试使 angularjs 应用程序在配置( http://12factor.net/config )方面符合 12 因素。 它应该取决于环境,我不应该看到 development 字样, te
我在我的项目中使用 Soil,我在我的包含目录中添加了 soil,在我的预编译头文件中我包含了“Soil.h”。对于我预编译头中的库,我添加了这个: #pragma comment(lib,"SOIL
在我的 Web 应用程序中,我将所有最终用户的日期信息以 UTC 格式存储在数据库中,在向他们显示之前,只需将 UTC 日期转换为他们选择的时区。 我正在使用此方法将本地时间转换为 UTC 时间(在存
我的申请是 Piwik Server从放置在数百个网站上的跟踪代码接收传入的跟踪数据。当这些跟踪请求进入时,大部分工作负载是每秒向数据库写入数百次。我使用的是带有 JDBC 和 Hibernate 的
我有一个非常简单的 GWT 应用程序,它收集一些数据并在用户单击“提交”时提供确认对话框。我创建了一个 com.google.gwt.user.client.ui.DialogBox,填充它,然后调用
我正在使用 Delphi(2009 年,没关系)和 IBX,并且我正在尝试执行简单的代码: TestSQL.ExecQuery; 在此代码之前,我已检查(也可以在调试器监视中看到)TestSQL.Tr
许多线性代数例程都将常量(例如 alpha 和 beta)作为参数。例如cublas?GEMM执行以下操作: C := alpha*op( A )op( B ) + betaC 假设我将 beta 设
我是一名优秀的程序员,十分优秀!