如何修复 /libgcov.a(_gcov.o) 中的隐藏符号 __gcov_init 被 DSO 引用

发布于 2023-03-17 22:00:05 字数 2593 浏览 51 评论 0

问题

当我们引入 Gocv 来构建我的代码覆盖项目时,我遇到了以下错误消息:

错误 1

g++     -m64 -z muldefs -L/lib64 -L/usr/lib64 -lglib-2.0 -m64 -DUV_64PORT -DU2_64_BUILD -fPIC -g  DU_starter.o
NFA_msghandle.o NFA_svr_exit.o du_err_printf.o  -L/workspace/code/myproject/src/home/x64debug/bin/
-L/workspace/code/myproject/src/home/x64debug/bin/lib/ -lundata -lutcallc_nfasvr
-Wl,-rpath=/workspace/code/myproject/src/home/x64debug/bin/ -Wl,-rpath=/.dulibs28  -Wl,--enable-new-dtags
-L/.dulibs28 -lodbc  -lm -lncurses -lrt -lcrypt -lgdbm -ldl -lpam -lpthread  -ldl -lglib-2.0
-lstdc++ -lnsl -lrt -lgcov -o /workspace/code/myproject/src/home/x64debug/objs/du/share/dutsvr
/usr/bin/ld: /workspace/code/myproject/src/home/x64debug/objs/du/share/dutsvr:
hidden symbol `__gcov_init' in /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcov.a(_gcov.o) is referenced by DSO

错误 2

也可能是这样的错误

/home/p7539c/cutest/CuTest.c:379: undefined reference to `__gcov_init'
CuTest.o:(.data+0x184): undefined reference to `__gcov_merge_add'

定位问题

让我们以错误 1 ​​为例

从错误消息中,我注意到 -lundata -lutcallc_nfasvr 所有链接库(-l库)

我一一检查库 undata,发现它显示并表示未定义的符号。utcallc_nfasvrU __gcov_initU

使用 find 命令搜索库,使用 nm 命令列出库中的符号。

-sh-4.2$ find -name *utcallc_nfasvr*
./bin/libutcallc_nfasvr.so
./objs/du/work/libutcallc_nfasvr.so
-sh-4.2$ nm ./bin/libutcallc_nfasvr.so | grep __gcov_init
                 U __gcov_init

怎么修

就我而言,我只是添加了以下代码 LIB_1_LIBS := -lgcov 以允许 utcallc_nfasvr 库调用 gcov。

LIB_1 := utcallc_nfasvr
# added below code to my makefile
LIB_1_LIBS := -lgcov

重建,错误消失,然后检查库,这次显示 t __gcov_init 了,这意味着符号值存在而不是隐藏。

-sh-4.2$ nm ./bin/libutcallc_nfasvr.so | grep __gcov_init
                 t __gcov_init

或者在你的情况下可能会像这样构建一个共享库,类似地,只需添加编译参数 -lgcov

g++   -shared -o libMyLib.so src_a.o src_b.o src_c.o -lgcov

概括

我多次遇到以下问题

undefined reference to `__gcov_init'

undefined reference to `__gcov_merge_add'

`hidden symbol `__gcov_init' in /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcov.a(_gcov.o) is referenced by DSO`

每次我都可以通过添加 -glcov 然后重新编译来修复它。重建后错误消失了。您使用 nm 命令再次检查符号是否已添加成功。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

始终不够

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文