
Compile
「已注销」
本博客现只用于学习用,可能会转载他人的知识,若有涉及到您的版权问题,请与我联系。
展开
-
C++ 如何快速获取一个变量是哪个命名空间里面的?
有时候使用了using namespace编译指令,使用变量的时候就不用加命名空间了,但是如果我们需要知道变量在哪个命名空间,怎么做呢?以下使用objdump和c++filt进行还原:/// @file main.cc/// @author zhaolu/// @version 1.0/// @data 2020-03-14#include <iostream>#inc...原创 2020-03-14 16:04:29 · 1263 阅读 · 0 评论 -
GCC -fprofile-arcs -ftest-coverage编译选项
gcc需要静态注入目标程序编译选项,在编译链接的时候加入2个选项(-ftest-coverage -fprofile-arcs ),编译结束之后会生成 .gcno 文件,而经过静态注入的目标程序在“正常结束”后,会在运行目录下产生.gcda数据文件,通过gcov工具就可产生覆盖率数据结果。-ftest-coverageProduce a notes file that the gcov ...原创 2020-03-08 21:23:31 · 1097 阅读 · 0 评论 -
GCC C/C++产生覆盖率
在Linux上的c/c++开发一般都使用gcc/g++作为主要的编译器,如果需要产生覆盖率数据需要在Makefile或者Scons文件中做下面的编译链接设置:编译的时候,增加 -fprofile-arcs -ftest-coverage 或者 –coverage链接的时候,增加 -fprofile-arcs 或者 –lgcov打开–g3 选项,去掉-O2以上级别的代码优化选项,否则编译器会...原创 2020-03-08 21:23:07 · 1473 阅读 · 0 评论 -
GCC gcov 代码覆盖工具的简单使用
gcov 是一个可用于C/C++的代码覆盖工具,是GCC的内建工具。它的使用很简单,需要在编译和链接时增加-fprofile-arcs -ftest-coverage生成二进制文件。gcov主要使用.gcno和.gcda两个文件,.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。.gcda是由加了-fprofile-arcs编译参数的编译后的文...原创 2020-03-08 21:23:49 · 1520 阅读 · 0 评论 -
GCC 优化选项 -O -O0 -O1 -O2 -O3 -Os 简单介绍
gcc默认提供了5级优化选项:-O0:无优化(默认)-O和-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。该模式在编译大型程序的时候会花费更多的时间和内存。在-O1下:编译会尝试减少代码体积和代码运行时间,但是并不执行会花费大量时间的优化操作。-O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。GCC执行几乎所有支持的操作但不包括空...原创 2020-02-26 14:27:15 · 9855 阅读 · 0 评论 -
C/C++ 面向切面编程 Mock测试
原理可以使用gcc的链接选项 -Wl,–wrap=func。会设置符号映射,在符号重定位阶段的时候,静态链接器对func函数的定位会定位到 __wrap_func 符号,对 __real_func 会定位到原func。举例说明:C Mocklibtest.h/// @file libtest.h#ifndef __LIBTEST_H__#define __LIBTEST_H__...原创 2020-03-08 21:25:25 · 1859 阅读 · 0 评论 -
C语言 强符号与弱符号
对于C语言来说,编译器默认函数和初始化的全局变量为强符号,未初始化的全局变量为弱符号(C++并没有将未初始化的全局符号视为弱符号)。可以通过GCC的"__ attribute ((weak))"来定义任何一个强符号为弱符号,可以使用nm查看一个目标文件中的符号类型。 attribute__ ((weak))只对链接器有效,对编译器不起作用,编译器不区分强符号和弱符号,只要在一个源文件中定义两个相同...原创 2020-02-14 14:37:25 · 488 阅读 · 1 评论