项目需要用到阿里云Iot平台,ubuntu14.04下交叉编译ARM平台成功成功生成了Iot的相关库(包括libiot_sdk.a libiot_tls.a libiot_hal.a)并可以正常使用,但是在X86 64位下编译生成得到相关库加入项目工程中编译却出现以上错误。这里记录下解决过程:
首先makefile库连接中加入libgcov.a库支持 -lgcov,解决此问题,但是一个新的问题又出现了:libgcov.a(_gcov_merge_add.o) is referenced by DSO
解决问题:
在LDFLAGS中加入 LDFLAGS += -ftest-coverage -fprofile-arcs,解决方案参考了下列博文:
遇到一个libgcov.a(_gcov_merge_add.o) is referenced by DSO问题,上网搜了搜,很多人遇到,有说加-shared,有说加--coverage,有说加-lgcov,统统都不能解决问题。
后面才发现,其实是对gcov原来理解不够透彻的原因,单独编译一个.c文件没有问题,多个.c文件生成.o再链接成应用程序就出问题。
原因就出在CFLAG是不用加-ftest-coverage -fprofile-arcs的,因为这时候只是编译成.o的二进制文件,gcov要在生成.o文件后在.o文件中打桩,如果在CFLAG就加了-ftest-coverage -fprofile-arcs,在LDFLAG不加是肯定编译不过的,在LDFLAG加了-ftest-coverage -fprofile-arcs那么就会造成链接的时候出现标题的错误。
结论就是CFLAG是不用加-ftest-coverage -fprofile-arcs,而在LDFLAG加-ftest-coverage -fprofile-arcs,问题解决