您的位置:首页 > 运维架构 > Linux

【Linux/C】程序的编译和链接--例子

2016-06-23 16:44 330 查看
上一篇文章已经讲过了程序从源文件到可执行文件之间的实现过程,这篇文章讲一个简单的例子,首先准备三个文件。

//main.c文件内容
#include<stdio.h>
#include "fun.h"
int main()
{
printf("the answer is %d\n",calc(5,6));
printf("hello,world.\n");
return 0;
}


//fun.h文件内容
#ifndef FUN_H
#define FUN_H
int calc(int a,int b);
#endif


//fun.c文件内容
#include"fun.h"
int calc(int a,int b)
{
return a+b;
}


在main.c文件中包含了fun.h文件,并调用了fun.h中定义的calc函数,calc函数的实现在calc.c文件中。

1.预处理、编译、汇编main.c文件

上篇文章已经讲过了如何一步步得到*.i、*.s、*.o文件,这次我们不再一步步生成目标文件(*.o),直接一步到位。

gcc -c main.c -o main.o



此时main.o文件是不能生成可执行文件的。



编译器提示undefined reference to `calc’,因为我们没有链接库文件。

2.创建静态库文件

1.首先,编译fun.c得到fun.o目标文件

gcc -c fun.c



2.然后,创建静态库文件

ar crv libfun.a fun.o



3.在某些系统中,还要为静态库生成一个内容表

ranlib libfun.a

4.库文件创建完成后,就可以链接了。

3.程序链接静态库文件

前面已经生成了main.o文和libfun.a文件,现在我们链接一下,生成可执行文件。

gcc main.o -o main.out -L. -l fun

注意一下这条语句的规则,-L表示指定库文件目录,”.”表示当前文件夹,这里也可以写出目录完整路径。-l fun表示指定库文件名,库文件的完整名是libfun.a,前面的lib和后缀.a均省略。



可见,main.out文件已经生成,可以执行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: