全部
我正在尝试在 Ubuntu 20.04 上遵循 gcov tuturial
我将我的 gcc 更新为 gcc 13.1.0
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt install gcc-13
然后我尝试使用
构建教程代码gcc-13 --coverage -fprofile-info-section -c main.c
gcc-13 --coverage -fprofile-info-section -c app.c
ld --verbose | sed '1,/^===/d' | sed '/^===/d' > linkcmds
gcc-13 --coverage main.o app.o -T linkcmds -Wl,-Map,app.map
然后我得到了这个错误,我检查了app.map,没有教程提到的
__gcov_info_start
和__gcov_info_end
。
/usr/bin/ld: main.o: 在函数
__gcov_info_start' 中 /usr/bin/ld: main.c:(.text+0x1ea): 对 `__gcov_info_end' 的未定义引用 收集2:错误:ld返回1退出状态dump_gcov_info': main.c:(.text+0x1df): undefined reference to
我发现有一条消息,说
As-needed library included to satisfy reference by file (symbol)
libc.so.6 /usr/lib/gcc/x86_64-linux-gnu/13/libgcov.a(_gcov.o) (exit@@GLIBC_2.2.5)
main.o: dynamic relocation against `__gcov_info_start' in read-only section `.text'
有什么我想念的吗?
全部
我发现我错过了教程中的一个步骤
ld --verbose | sed '1,/^===/d' | sed '/^===/d' > linkcmds
我需要在 .rodata 之后添加 .gcov_info 部分
.gcov_info :
{
PROVIDE (__gcov_info_start = .);
KEEP (*(.gcov_info))
PROVIDE (__gcov_info_end = .);
}