gpt4 book ai didi

c - dlopen 无法使用代码覆盖工具 (lcov/gcov)

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:11 25 4
gpt4 key购买 nike

整个应用的结构:

  1. 共享库说 - low_level.so。
  2. 静态库说 - high_level.a。此静态库通过调用 dlopen 函数(用于加载 low_level.so)和 dlsym 函数(用于获取该符号加载到内存中的地址)来使用“low_level.so”。
  3. 应用程序(具有“main”功能)- 此应用程序链接“high_level.a”静态库,该静态库在内部调用“low_level.so”库中的所需函数。

当前场景(工作/不工作)

  1. 上述结构适用于我不使用 lcov/gcov 工具进行代码覆盖的情况。
  2. 我成功地使用 lcov/gcov 工具获得了“high_level.a”静态库的代码覆盖率。
  3. 我尝试使用上述结构中的 lcov/gcov 获取“low_level.so”共享库的代码覆盖率,但没有成功,以下是尝试过的步骤和看到的错误:

    • 在编译“low_level.so”库时添加了“-fprofile-arcs”和“-ftest-coverage”标志。并创建了库。

    • 为“high_level.a”库的编译添加了“-coverage”选项。并创造了图书馆。

    • 为应用程序添加了“LFLAGS=-lgcov -coverage”(具有“main”功能)。和创建了可执行应用程序。

    • 现在,当我尝试执行上面编译的应用程序时,出现以下错误打开:无法 dlopen:/home/test/libXXX.so: undefined symbol: __gcov_merge_add

问题?:

  1. 这是否意味着 dlopen 不能与 lcov/gcov 一起使用,我们需要实际链接静态库中的共享库(通过更改当前的静态库代码)?还是为了使 lcov/gcov 与 dlopen 一起工作,我缺少做些什么?

注意:所有代码都在“C”中。

仅供引用,我搜索了相同的内容并发现了一些类似的问题,但仍然落后于选定的最佳答案: How to find the coverage of a library opened using dlopen()?除了不使用 dlopen 的选项外,网上也没有好的指示。

最佳答案

我通过将 -lgcov 添加到共享库链接来解决这个问题。

关于c - dlopen 无法使用代码覆盖工具 (lcov/gcov),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18764770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com