gcc ld错误 "libgcov.a(_gcov_merge_add.o)被DSO引用"

4
尝试使用gcov编译代码以进行代码覆盖率,但出现以下错误:
在 /usr/lib/gcc/i686-redhat-linux/4.4.4/libgcov.a(_gcov_merge_add.o) 中引用了被隐藏的符号`__gcov_merge_add', 而该符号被 DSO 引用。/usr/bin/ld:最终链接失败:输出上的不可表征区段 collect2: ld 返回 1
下列编译器选项是新添加的 gcov 选项:
-O0 -fprofile-arcs -ftest-coverage  -Xlinker -zmuldefs

链接器(ld)标志:

-fprofile-generate -fprofile-arcs

并且与库-lgcov链接。

请提供建议。

2个回答

2
这个问题的解决方法是:
  • 使用-fprofile-arcs -ftest-coverage进行编译
  • 使用-fprofile-arcs -lgcov进行链接
当我在链接时没有使用-fprofile-arcs时,我也遇到了同样的错误。

0

我们可以使用简单的编译器选项--coverage -O0并最终链接-lgcov来启用代码覆盖率,适用于RHEL 6.*版本。

然而,在Debian上,我们必须使用-O0 -fprofile-arcs -ftest-coverage -Xlinker -zmuldefs来生成启用代码覆盖率的二进制文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接