phs*_*phs 11 ubuntu linker gcc libtool gcov
我有一个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 referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[2]: *** [myproj/inttests/locale_test] Error 1
Run Code Online (Sandbox Code Playgroud)
如何在ubuntu/g ++ 4.6上修复构建?
周围的Googling后我看到这个线程,这说明添加--coverage
到CXXFLAGS
运行时./configure
.事实上,虽然它不适用于那张海报,但它对我有用:
./configure CXXFLAGS="--coverage"
Run Code Online (Sandbox Code Playgroud)
但是这个变量是为包安装程序保留的,而不是维护者(我).这个问题简化为"如何将它合并到构建中?"
这还不够:
GCOV_CFLAGS="-fprofile-arcs -ftest-coverage --coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
Run Code Online (Sandbox Code Playgroud)
假设GCOV_CFLAGS
被包含在有效CXXFLAGS
(未显示,但确实如此)中,似乎此修复应该有效.它没有.
进一步深入研究,如果我们CXXFLAGS="--coverage"
从命令行退出并将其放置在configure.ac
某个地方,我们似乎应该至少获得一些牵引力.实际上,除非将行放在AC_PROG_CXX
选择编译器的调用之上,否则这也不起作用.
所以现在我们获得了一些洞察力.AC_PROG_CXX
正在改变它看到的东西--coverage
,这很可能是为什么放置GCOV_CFLAGS
不起作用:为时已晚.
仔细查看日志,看起来秘密酱是自动包含-lgcov
在失败的链接步骤中.我不确定这个库是否需要如此秘密,但如果我改变我的变量:
GCOV_CFLAGS="-fprofile-arcs -ftest-coverage --coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LIBS="-lgcov"
Run Code Online (Sandbox Code Playgroud)
..并确保GCOV_LIBS
包含在LIBS
我的所有平台上,然后一切正常.
编辑:另见这个主题.
归档时间: |
|
查看次数: |
10576 次 |
最近记录: |