libiot_sdk.a(mqtt_client.o):(.data+0x1060):对‘__gcov_merge_add’未定义的引用

        项目需要用到阿里云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,问题解决

你可能感兴趣的:(C/C++)