我需要使用gcov
对我正在工作的共享库进行一些测试覆盖。
问题是libtool
将对象文件从my-name.c
重命名为libmylib_la-my-name.lo
,而gcov
无法处理该转换。每次运行它时,都会生成错误消息cannot open notes file
。
如果我在构建后手动将my-name.c
重命名为libmylib_la-my-name.c
,那么gcov
就能正常工作,所以除了文件名混淆外,没有其他问题。
补充说明
尝试提供一个最小的可工作示例,我发现只有在设置lib..._la_CFLAGS
时(并且还设置为空值时),才会发生文件名混淆。
cat <<EOT > configure.ac
AC_INIT(sample,0.0.1)
AC_CONFIG_SRCDIR(configure.ac)
AM_INIT_AUTOMAKE(foreign)
LT_INIT
AC_PROG_CC
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
EOT
cat <<EOT > Makefile.am
lib_LTLIBRARIES=libsample.la
libsample_la_SOURCES=sample.c
# The following line triggers the filename mangling (libsample_la-sample.lo instead of sample.lo)
libsample_la_CFLAGS=
EOT
touch sample.c && autoreconf -if && ./configure && make
有没有办法避免libtool进行的文件名混淆,或者让 gcov
理解文件名混淆方案?
Makefile.am
很难诊断 - 你需要提供更多信息。 - Brett Hale