我有一个C++项目,它使用GNU Autotools构建脚本和libtool进行链接.最近我通过确保gcov添加了代码覆盖率检测
GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
Run Code Online (Sandbox Code Playgroud)
..get 分别包含在我的CFLAGS和LDFLAGS.在OS X 10.7.4上使用g ++ - 4.2(由自制软件安装),一切正常.
在使用g ++ 4.6.3的Ubuntu 12.04上,libtool无法链接我的一个测试:
/bin/bash ./libtool --tag=CXX --mode=link g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -o myproj/inttests/locale_test myproj/inttests/locale_test.o myproj/app/libapp.la -lboost_thread-mt -lboost_system-mt -pthread -llog4cplus
libtool: link: g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -Wl,-rpath -Wl,/usr/local/lib -o myproj/inttests/.libs/locale_test myproj/inttests/locale_test.o -pthread -L/usr/local/lib myproj/app/.libs/libapp.so -lboost_thread-mt -lboost_system-mt /usr/lib/liblog4cplus.so -pthread
/usr/bin/ld: myproj/inttests/.libs/locale_test: hidden symbol `atexit' in /usr/lib/x86_64-linux-gnu/libc_nonshared.a(atexit.oS) is …Run Code Online (Sandbox Code Playgroud) 我正在使用 QT Creator 来处理一个 C++ 中型项目。
项目结构基本上是这样的
项目
测试
这些库由测试项目中的可执行文件进行测试。我已经设法在启用 gcov 的情况下自行编译测试,并使用 lcov 生成代码覆盖率报告,但他们显示的覆盖率只是测试用例,而不是我正在测试的实际代码。我也尝试使用 gcov 编译静态库,但是当我对这些库运行测试时,它不会生成任何 gcov 输出文件。
如何通过将我的项目库与测试链接来生成 gcov 输出文件?我想看看我的单元测试是否存在任何差距。
在使用gcov支持编译我的项目时,我面临以下错误
以下是编译时的标志信息
编译器标志:
CXXFLAGS="-Wno-deprecated -g -ggdb -fprofile-arcs -ftest-coverage -fPIC"
Run Code Online (Sandbox Code Playgroud)
链接器选项:
LINK_CMD="gcc -fprofile-arcs -fPIC"
Run Code Online (Sandbox Code Playgroud)
以下是版本信息:
gcc版本:
gcc版本4.1.2 20080704(Red Hat 4.1.2-44)
gcov版本:
gcov(GCC)4.1.2 20080704(Red Hat 4.1.2-44)
错误:
DSO/usr/bin/ld引用/usr/lib/gcc/x86_64-redhat-linux/4.1.2/libgcov.a(_gcov.o)中的隐藏符号`__gcov_init':最终链接失败:输出上不可表示的部分collect2:ld返回1退出状态
你能帮我摆脱这个问题吗?