gpt4 book ai didi

c++ - 与 -static 链接时出现 Valgrind 错误——为什么?

转载 作者:可可西里 更新时间:2023-11-01 16:33:27 24 4
gpt4 key购买 nike

我有一个测试驱动程序链接到我编写的库。该库使用 autotools,因此它会生成存档(.a 文件)和动态库 (.so)。

当我将我的驱动程序与“g++ -static”链接时,大概是链接到 .a,valgrind 点亮并反复提示“条件跳转或移动取决于未初始化的值”。第一次失败发生在 __pthread_initialize_minimal 中的 main 之前。

当我在没有-static 的情况下进行链接时,大概是在使用.so 进行链接时,我没有收到任何valgrind 投诉。

有人知道为什么吗? valgrind 是否不能与 -static 一起使用?

更新:我什至无法发布我的驱动程序的精简版本,因为它链接到一个我无法精简的非常大的库,但我注意到所有程序中最简单的

int main()
{
return 0;
}

与 -static 链接并从 valgrind 运行时出错:

==15449== Use of uninitialised value of size 8
==15449== at 0x40B0F3: exit (in /home/jdgordo/src/t)

我应该包括我在 64 位 Redhat 5.5 上运行。

最佳答案

Does valgrind just not work with -static?

确实如此。问题不在 Valgrind 中,而是在 glibc 中,它不是 Valgrind 干净的。 glibc 开发人员拒绝修复这些问题(因为这些问题具有“无关紧要”的性质,并且修复它们会花费(几个)周期)。

当您动态链接时,这些错误来自 libc.so.6,并且可以很容易地被抑制,这是 Valgrind 默认情况下所做的。

但是当您静态链接时,这些错误来自您的可执行文件(现在包括来自 libc.a 的代码),因此默认的 Valgrind 抑制不会抑制它们。

您可以编写新的抑制(参见 Valgrind --gen-suppressions=yes documentation)。

或者您可以安装并使用 glibc-audit .

关于c++ - 与 -static 链接时出现 Valgrind 错误——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com