【问题标题】:Where are the gcov symbols in android GCC?android GCC中的gcov符号在哪里?
【发布时间】:2013-05-21 22:58:53
【问题描述】:

我正在尝试使用 gcov 编译一个 android .so 文件并收到以下链接错误: 在键入 0_XXX:../../source/file1.cpp:2661 的函数全局构造函数中:错误:未定义对 '__gcov_init' 的引用 在函数 .LPBX0:file1.cpp(.data.rel+0x24) 中:错误:未定义对 '__gcov_merge_add' 的引用 在以 0_funcname:../../source/file2.cpp:2154 为键的函数全局构造函数中:错误:未定义对 '__gcov_init' 的引用 在函数 .LPBX0:file2.cpp(.data.rel+0x24) 中:错误:未定义对 '__gcov_merge_add' 的引用 ' collect2: ld 返回 1 个退出状态 make: * [xxx.so] 错误 1

我的 android makefile 更改:CFLAGS += --coverage, LOCAL_LDLIBS += --coverage。 我似乎无法找到丢失符号的位置。我的 android 工具链 gcc 版本 4.6。 有任何想法吗?谢谢。

【问题讨论】:

    标签: android undefined-reference gcov


    【解决方案1】:

    您可以在 Android.mk 中添加以下行:

    LOCAL_CFLAGS += -fprofile-arcs -ftest-coverage

    LOCAL_LDFLAGS += -lgcov

    【讨论】:

    • 雷,谢谢你的回复。我已经尝试过这种方式,但仍然遇到“对 '__gcov_init' 和 '__gcov_merge_add' 的未定义引用问题”。我搜索了整个 android 源代码,并在几个文件夹中找到了 libgcov.a。我还尝试了 LOCAL_STATIC_LIBRARY += libgcov,另一个错误显示“out/target/product/XXX/obj/STATIC_LIBRARIES/libgcov_intermediates/libgcov.a(_gcov.o): in function gcov_version(,text+0x98): error: undefined reference to '_impure_ptr'”。你知道吗?
    【解决方案2】:

    用这 3 行更改 Android.mk

    1) LOCAL_LDLIBS += -l(libgcov 的绝对路径或相对路径)

    例如: LOCAL_LDLIBS += -l/home/souradeep.c/JFLTEATT/android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/lib/gcc/arm-eabi/4.6.x-google/libgcov.a

    2) LOCAL_LDFLAGS += -fprofile-arcs(这是链接重要的符号未找到问题所必需的)

    3) LOCAL_CFLAGS += -fprofile-arcs -ftest-coverage

                       or
    

    3) LOCAL_CPPFLAGS += -fprofile-arcs -ftest-coverage

    享受.......................................

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 2010-09-29
      • 2010-12-16
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多