2013-05-22 27 views
25

我現在的C代碼覆蓋率的研究工作,並遇到以下問題,GCC 4.4.6版:如何resovle __gcov_init未定義的引用問題,當鏈接

  1. 新增的編譯標誌CFLAGS = --coverage和鏈接器選項LDFLAGS := --coverageLOCAL_LDLIBS := --coverage,並得到了錯誤:

undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'

  • 添加選項LOCAL_LDFLAGS := --coverage,並得到了升墨水錯誤:
  • libgcov.a(_gcov.o): in function __gcov_set_sampling_rate: undefined reference to '__gcov_sampling_rate' libgcov.a(_gcov.o): in function gcov_exit: undefined reference to '__gcov_pmu_profile_filename' libgcov.a(_gcov.o): in function __gcov_init: undefined reference to '__gcov_pmu_profile_options' '__gcov_pmu_top_n_address'

    誰能幫助提供有關這個問題的一些建議嗎?

    回答

    8

    你正在鏈接-lgcov? 如果您使用的是Makefile,那麼查看它以幫助您將會非常有幫助。

    +0

    是的,我也試過-lgcov鏈接選項,但仍然遇到以上問題1)。感謝您的回覆 – lilingmzai

    29

    試試這個辦法:

    編譯您要使用這些選項來生成覆蓋代碼:

    CFLAGS: -fprofile-arcs -ftest-coverage

    LFLAGS: -lgcov --coverage

    如果不解決這個問題,那麼請提供一些關於您的應用程序結構的信息,即它的單個程序或涉及共享/靜態庫的應用程序等。

    希望有所幫助!

    +0

    對於我添加 - 覆蓋LFLAGS解決了這個問題。 早些時候,我只爲LFLAGS使用了-lgcov。 –

    +0

    我相信在''LFLAGS'上添加'--coverage'只對Mac上的LLVM編譯器是必需的。 – Zak

    0

    我不能確定哪個更改終於對我做了詭計,但我認爲這是-fprofile-generate標誌。使用GNAT GPS,我轉到左邊的Switches選項卡,然後選擇頂部的Ada Linker選項卡。然後我啓用了複選框Code Coverage。噢,我發現在同一區域的Builder標籤上,如果啓用Recompile if switches changed複選框,它可以節省很多牙齒。可能會減慢專業人員的速度,但我發現它很有幫助。

    相關問題