Compiler

不同CPU指令集添加编译选项

今天在处理程序在不同CPU架构,不同的指令集上编译的运行问题,其实没跨平台,算不上交叉编译,但需要将gcc按照不同cpu指令集在编译过程中提供给gcc选项,基本内容可以从gcc的man page里查找,下面是man里根据SSE...

多个目标

目前为止,Makefile都是执行一些简单的编译工作,这对于软件来说根本无法给用户使用,最终可执行程序以及目标文件都会安装到系统目录当中,这时候Makefile里仅仅只有目标文件的依赖关系和规则远远不够,至少应该...

Makefile中的宏

假如一个Makefile需要管理的是很多个源文件构成的工程,还一个一个地列出依赖关系,库文件和源文件,估计都要吐血了,所以就需要宏了 Makefile文件中的宏用来设置编译选项,在开发阶段一般不会进行优化,而是将de...

make

make命令内置了很多智能的机制,除此还提供一个Makefile文件,来告诉它处理流程,文件由一组依赖关系和规则组成,而每个依赖关系由一个目标和该目标的一些依赖组成,规则描述了这些依赖如何创建目标;make命令会...

目标文件

目标文件从结构上来看,已经是编译后的可执行文件格式,只是还没有经过链接过程,其中可能有些符号或者有些地址还没有被调整,其实本身就是按照可执行文件格式存储的,只是与真正的可执行文件在结构上稍有不同 现...

静态链接小述拼装

一个程序被分割成很多个模块之后,这些模块之间最后如何组合形成一个单一的程序可归结为模块之间如何进行通信的问题,比如模块间的函数调用,模块间的变量访问;函数访问必须知道目标函数的地址,变量访问也必须...

编译过程

平时用的GCC实际上是一些后台程序的包装,假如手动编译一个新版本的gcc以及它的所有依赖模块,单核估计会耗费你几十分钟的时间,安装过程中可以看到as,ld之类的可执行程序安装到系统目录下,实际上gcc就是这些程...

编译系统4:链接

hello.c程序当中调用了printf,它是标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中,链接器ld就是负责处理这种合并...

编译系统3:汇编

汇编器as将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件hello.o中,它是一个二进制文件,它的字节编码是机器语言指令而不是字符,所以如果文本编辑器中打开h...

编译系统2:编译

编译阶段: 编译器cc1将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令。汇编语言的有用之处在于它为不同高...

编译系统1:预处理

对于编译链接过程一直了解得不是太透彻,今天学习学习,从最经典的Hello World开始: #include <stdio.h> int main(){     printf(“Hello World\n”);     return 0; } 在lin...

make distclean

今天碰到个鬼问题,坑了半天时间 编译的时候,configure,然后make,在make的时候中间步骤一大堆,先是生成了一个.c,然后怎么又要调用一个.y文件,然后让上面一堆.c中间文件产生.o文件,然后用ar归档生成一个.a...

gcc –O2 -o $@ $<

前天调试一个程序的时候,定位出是Makefile写的不对,然后手动修改时,被Boss嘲笑了下不太专业,然后他亲自补了标题的一句,我笑着回复,这么高端的玩意暂时没到到这水平 %.o:%.c     gcc –O2 –o ...

查找程序编译打开的宏

一个projects里查找到底有多少个宏在编译时生效,多少个开关是打开的 可在ifdef等后面添加一行#warning,使得编译过程中以warning的形式打印出来,当然gcc不要打开Werror选项,否则都作为error了 进而可通过模式...

浙ICP备16024533号

浙公网安备 33010802007459号