关于程序的编译和链接

转载 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. 

相关文章推荐

程序的编译和链接

下面的例子用于帮助理解程序编译和链接。 一个C语言包源程序包括两个文件:main.c 和fun.c,如下: //main.c #include "stdio.h" extern int add(int...

Linux程序编译链接动态库版本的问题

不同版本的动态库可能会不兼容,如果程序在编译时指定动态库是某个低版本,运行是用的一个高版本,可能会导致无法运行。Linux上对动态库的命名采用libxxx.so.a.b.c的格式,其中a代表大版本号,...

ELF文件格式与程序的编译链接

说明:本文的讨论基于一个运行linux的x86系统环境,使用标准ELF文件格式。讨论集中在32位代码,在x86-64系统上用gcc -m32产生32位代码。若编译时发生/usr/includ...

ios程序编译链接参数 all_load 的 ld duplicate symbol 的bug及修复

duplicate symbol _OBJC_CLASS 的几种原因 1.项目文件里面有多个相同名字的文件; 2.import 的时候.h写成.m了;xcode的自动完成特性,在你导入头文件的时候...

ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复

问题 -all_load 是在Objective-C 编译时常用到的一个参数,比如这篇文章所介绍的,生成静态库的一些问题-all_load。但是我们在加入这个参数后,有时会出现“ld: du...

程序的编译链接与执行--IAR

IAR是很多嵌入式平台的编译链接与下载工具,为编程人员提供了极大的方便。下面我将以它为例来详细解说。一般程序下载进入相应的硬件平台需要以下三个阶段:程序的编译、程序的链接、程序的运行。 1.1 程...

《程序的编译,链接,运行》读书笔记

《程序的编译,链接,运行》读书笔记

程序编译和链接

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

Linux下编译一个静态链接的程序的注意点

1. ld的-static开关加上之后,就可以编译出一个静态链接的程序了。要注意该程序用到的所有的库,都要有相应的.a版本,编译的时候作为一个source file放到命令行中即可。光有库的.so没用...

linux下用gcc进行程序的编译,链接(多功能)

转载:http://blog.sina.com.cn/s/blog_494e45fe0100infx.html #gcc hello.c 该命令将hello.c直接生成最终二进制可执行程序a.out...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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