永久免费网站服务器,想开个网站怎样开公司,企业自建网站平台有哪些,上海企业服务云定位Linux撰写C语言并编译的过程
1、预处理 将所有的#define删除#xff0c;并且展开所有的宏定义#xff0c;并且处理所有的条件预编译指令#xff0c;比如#if #ifdef #elif #else #endif等。处理#include预编译指令#xff0c;将被包含的文件插入到该预编译指令的位置。删除…Linux撰写C语言并编译的过程
1、预处理 将所有的#define删除并且展开所有的宏定义并且处理所有的条件预编译指令比如#if #ifdef #elif #else #endif等。处理#include预编译指令将被包含的文件插入到该预编译指令的位置。删除所有注释“//”和“/* */”。添加行号和文件标识以便编译时产生调试用的行号及编译错误警告行号。保留所有的#pragma编译器指令后续编译过程需要使用它们。 命令
gcc -E hello.c -o hello.i //将hello.c文件预处理至hello.i文件-E指处理完停止2、编译 编译过程就是对预处理完的文件进行一系列的词法分析语法分析语义分析及优化后生成相应的汇编代码。 命令
gcc -S hello.i -o hello.s3、汇编 将汇编语言转成二进制但是还不能执行因为调用了一些库函数这些库函数还没被解析例如#includestdio.h的printf函数还未被解析需要执行链接操作 汇编命令
gcc -c hello.s -o hello.o4、链接 链接也分为静态链接和动态链接其要点如下 静态链接是指在编译阶段直接把静态库加入到可执行文件中去这样可执行文件会比较大。链接器将函数的代码从其所在地不同的目标文件或静态链接库中拷贝到最终的可执行程序中。为创建可执行文件链接器必须要完成的主要任务是符号解析把目标文件中符号的定义和引用联系起来和重定位把符号定义和内存地址对应起来然后修改所有对符号的引用。 这里补充一下静态库、动态库、库文件
库 库是预编译的目标文件(object files)的集合它们可以被链接进程序。 我们在写c语言的时候经常会去包含一个.h的头文件这个头文件就是库文件例如stdio.h 动态库与静态库 静态链接是指在编译阶段直接把静态库加入到可执行文件中去这样可执行文件会比较大。动态链接则是指链接阶段仅仅只加入一些描述信息而程序执行时再从系统中把相应动态库加载到内存中去。