【Linux/C】程序的编译和链接--例子
2016-06-23 16:44
330 查看
上一篇文章已经讲过了程序从源文件到可执行文件之间的实现过程,这篇文章讲一个简单的例子,首先准备三个文件。
在main.c文件中包含了fun.h文件,并调用了fun.h中定义的calc函数,calc函数的实现在calc.c文件中。
gcc -c main.c -o main.o
此时main.o文件是不能生成可执行文件的。
编译器提示undefined reference to `calc’,因为我们没有链接库文件。
gcc -c fun.c
2.然后,创建静态库文件
ar crv libfun.a fun.o
3.在某些系统中,还要为静态库生成一个内容表
ranlib libfun.a
4.库文件创建完成后,就可以链接了。
gcc main.o -o main.out -L. -l fun
注意一下这条语句的规则,-L表示指定库文件目录,”.”表示当前文件夹,这里也可以写出目录完整路径。-l fun表示指定库文件名,库文件的完整名是libfun.a,前面的lib和后缀.a均省略。
可见,main.out文件已经生成,可以执行。
//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文件已经生成,可以执行。
相关文章推荐
- [代码实例][Linux系统编程]遍历目录
- 【最短系列】linux命令行中,各颜色意义
- linux inode解释
- Linux删除重复行 排序和不排序的做法
- linux基础命令回顾
- linux配置git,操作github代码
- linux远程登录ssh免密码
- Linux动态加载内核模块
- gcc代码反汇编查看内存分布[2]: arm-linux-gcc
- linux 进程启动方式
- Linux 下Sqlite3 的下载及安装
- linux命令tail
- 源码debian打包
- 关于Linux 上两种 mysql 执行语句结果到文件的写法
- 12-21学习记录 初识Linux
- Linux 服务器查看日志基本命令
- linux下mysql的root密码忘记
- linux+windows的双系统通用安装方式
- linux 平均负载 load average 的含义
- Linux-常见环境变量及其作用