关于程序的编译和链接

转载 2007年09月20日 15:13:00
在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。

链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现。你需要指定函数的Object File. 

程序编译和链接原理理解

一、本书解决的问题 本书主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台下,一个应用程序在编译、链接、和运行时所做的事,具体如下: 1.Windows和Linux操作系统...
  • chen_geng
  • chen_geng
  • 2016年08月11日 19:51
  • 2398

程序编译,链接过程

一、概述 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目...
  • shenjianxz
  • shenjianxz
  • 2016年08月05日 16:05
  • 10138

程序的前世今生——编译、链接和加载简介

本篇文章是组内分享的小结,主要介绍源代码 -> 可执行程序 -> 执行这一过程。也就是源代码是如何转化为可执行程序,然后可执行程序又是如何执行的。在用java或python时,只需要java ClsN...
  • chosen0ne
  • chosen0ne
  • 2012年10月28日 23:46
  • 5156

程序的编译链接和装载

出处:http://duanple.blog.163.com/blog/static/7097176720111141085197/1.最近碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措。...
  • yangshuangtao
  • yangshuangtao
  • 2015年11月26日 11:53
  • 1671

关于程序的编译和链接

一个源程序到一个可执行程序一般需要经过预编译、编译、汇编和链接四个步骤。当我们使用IDE编写代码的时候,这些过程IDE都会默认的为我们完成。但是了解这些过程都是做什么是很有必要的。 1、预编译    ...
  • niusaifei1987
  • niusaifei1987
  • 2013年11月11日 22:46
  • 394

2 关于程序的编译和链接

作者:韩亚飞_yue31313_韩梦飞沙   QQ:313134555  2       关于程序的编译和链接 ——————————   在此,我想多说关于程序编译的一些...
  • yue31313
  • yue31313
  • 2016年08月04日 14:41
  • 99

编译器工作过程中链接的作用

 链接过程是由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。 例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能...
  • zwt0112
  • zwt0112
  • 2016年11月12日 16:24
  • 591

程序编译和链接

一个源程序到一个可执行程序一般需要经过预编译、编译、汇编和链接四个步骤。当我们使用IDE编写代码的时候,这些过程IDE都会默认的为我们完成。但是了解这些过程都是做什么是很有必要的。 1、预编译 ...
  • zldeng_scir
  • zldeng_scir
  • 2012年04月24日 21:51
  • 2566

程序在 编译期,链接期, 运行期各执行哪些操作?

源文件的编译过程包含两个主要阶段,而它们之间的转换是自动的。 先说说要实现一个程序功能要经历的步骤吧   step1:当然就是在编辑窗口(用高级语言)输入你的原程序  (f.c) step2:编...
  • zyzhangyue
  • zyzhangyue
  • 2015年05月17日 13:24
  • 1200

C++, Java和C#的编译、链接过程解析

1.1.1 摘要 我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,这样计算机才能执行高级语言编写的程序,在接下来的博文中,我们将介绍非托管和托管语音的...
  • yangcs2009
  • yangcs2009
  • 2014年10月26日 13:09
  • 2455
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于程序的编译和链接
举报原因:
原因补充:

(最多只允许输入30个字)