【发布时间】:2011-11-22 07:08:11
【问题描述】:
我有一个链接到我编写的库的测试驱动程序。该库使用自动工具,因此它会生成存档(.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 上运行。
【问题讨论】:
-
尝试将问题缩小到尽可能少的操作系统代码行并在此处发布。
-
在各种系统库中有很多失误和捷径,因此在 valgrind 中出现这些并不罕见。我想您可以尝试系统地忽略它们,或者只是使用共享版本进行测试。
-
我的系统上没有看到这个。 @KerrekSB - 虽然是对的,但这并不是真正值得担心的事情,而且 valgrind 附带了一个大文件,可以抑制其中的大部分。它可能与您系统上的 libc/编译器版本略有不匹配。