使用 gcc 13.1.0 在独立环境中运行测试覆盖率

问题描述 投票:0回答:1

全部

我正在尝试在 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: 在函数

dump_gcov_info': main.c:(.text+0x1df): undefined reference to 
__gcov_info_start' 中 /usr/bin/ld: main.c:(.text+0x1ea): 对 `__gcov_info_end' 的未定义引用 收集2:错误:ld返回1退出状态

我发现有一条消息,说

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'

有什么我想念的吗?

linux gcc ubuntu-20.04 gcov
1个回答
0
投票

全部

我发现我错过了教程中的一个步骤

ld --verbose | sed '1,/^===/d' | sed '/^===/d' > linkcmds

我需要在 .rodata 之后添加 .gcov_info 部分

  .gcov_info      :
  {
    PROVIDE (__gcov_info_start = .);
    KEEP (*(.gcov_info))
    PROVIDE (__gcov_info_end = .);
  }
© www.soinside.com 2019 - 2024. All rights reserved.