2010-09-14 60 views
19

是否可以通過運行鏈接到使用--coverage選項構建的共享庫的可執行文件來生成gcov數據文件(.gcda文件)?gcov:從共享庫生成.gcda輸出?

基本上,我有由編譯成一個共享庫中的多個C++文件主庫,然後一個稱爲「測試」包含鏈接到並測試主庫的測試程序子目錄。一切都編譯得很好,.gcno文件是爲庫源文件和測試源文件生成的。 .gcda文件只是爲測試源文件生成的,但我真的需要它們來編譯到共享庫中的實際源文件。

任何想法?

附加信息:
- 這是所有的C++代碼
- 一切都被建立與由automake
產生化妝腳本 - 該--coverage選項在共享庫lib_la_CPPFLAGS和lib_la_LDFLAGS指定Makefile.am
- 該--coverage選項爲AM_CPPFLAGS和AM_LDFLAGS指定測試可執行Makefile.am
- 測試源文件使用谷歌測試(C++單元測試框架)

編輯的:固定的間距問題

回答

20

我終於解決了這個問題,得到了一些來自gcc的人的幫助。請參閱此處的線索:http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html

事實證明,正在把.gcda文件中的.libs目錄,因爲這是共享庫(的.so)文件都在那裏。爲了讓gcov產生輸出,我必須將.gcda文件上移一個級別到源文件所在的位置。

而且,這裏的地方別人也陷入了一些相同的問題類似的線程:can gcov deal with shared object?

+5

此外,對不起,回答我的問題,並接受它,但它坐在這裏幾天都沒有任何人的幫助。 – deuberger 2010-09-20 20:02:46

+6

我也開始使用gcov和共享庫,找到你的答案和引用的gcc-help線程將會很有用。回答你自己的問題是一個很好的理由。 – Tom 2011-02-18 03:57:33

+2

@Tom:謝謝,我很高興這很有幫助。我也應該注意gcov有一個-o(--object-direct)選項,它也可以用來指定.gcda文件的位置。 – deuberger 2011-02-18 14:07:08