我有一个测试驱动程序链接到我写的库.该库使用autotools,因此它生成存档(.a文件)和动态库(.so).
当我用"g ++ -static"链接我的驱动程序时,可能会链接到.a,valgrind会反复抱怨"有条件的跳转或移动取决于未初始化的值".第一次失败发生在__pthread_initialize_minimal中的main之前.
当我没有静态链接,可能与.so链接时,我没有得到任何valgrind投诉.
有谁知道为什么?valgrind不适用于-static吗?
更新:我甚至无法发布我的驱动程序的简化版本,因为它链接到一个我无法削减的非常大的库,但我注意到所有程序中最简单的
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
与-static链接并从valgrind运行时出错:
==15449== Use of uninitialised value of size 8
==15449== at 0x40B0F3: exit (in /home/jdgordo/src/t)
Run Code Online (Sandbox Code Playgroud)
我应该包括我在64位Redhat 5.5上运行.
Emp*_*ian 13
valgrind不适用于-static吗?
确实如此.问题不在于Valgrind,而是在glibc中,这不是Valgrind的清洁.glibc开发人员拒绝解决这些问题(因为问题属于"不关心"的性质,并且修复了成本(一些)周期).
当您动态链接时,这些错误来自libc.so.6并且可以轻松地被抑制,这是Valgrind默认执行的操作.
但是当您静态链接时,这些错误来自您的可执行文件(现在包含代码libc.a),因此默认的Valgrind抑制不会抑制它们.
您可以编写新的抑制(请参阅Valgrind --gen-suppressions=yes 文档).
或者你可以安装和使用glibc-audit.
| 归档时间: |
|
| 查看次数: |
3066 次 |
| 最近记录: |