UNIX 下是 .o 文件,即 Object File,这个动做叫作编译(compile)。而后再把大量Object File 合成执行文件,这个动做叫做连接(link)。linux
通常来讲,每一个源文件都应该对应于一个中间目标文件(O 文件或是 OBJ 文件)。连接时,主要是连接函数和全局变量,因此,咱们可使用这些中间目标文件(O 文件或是OBJ文件)来连接咱们的应用程序。连接器并无论函数所在的源文件,只管函数的中间目标文件(Object File)。shell
咱们要给中间目标文件打个包,在 Windows 下这种包叫“库文件”(Library File),也就是.lib 文件,在 UNIX下,是 Archive File,也就是 .a 文件。bash
总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。若是函数未被声明,编译器会给出一个警告,但能够生成 Object File。而在连接程序时,连接器会在全部的 Object File 中找寻函数的实现,若是找不到,那到就会报连接错误码(Linker Error),意思说是说,连接器未能找到函数的实现。你须要指定函数的Object File。函数
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# gcc main.c
a.out hello.c main.c
复制代码
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# gcc -c main.c
main.o hello.c main.c
复制代码
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# gcc main.o
a.out
复制代码
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# gcc -o main.o
gcc: fatal error: no input files
compilation terminated.
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# gcc main.o -o run
hello.c main.c main.o Makefile run
复制代码
gcc main.c -o run
复制代码
编译main.c并连接生成可执行文件run,并将中间产生的目标文件main.o删除。学习
使用ar命令将目标文件打包,不过通常这个动做都是在makefile中实现。 连接静态库参数说明,-L 表示静态库路径,-lmy 即连接libmy.a文件ui
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# cat main.c
#include <stdio.h>
void main()
{
printf("Im a super man\n");
hello();
test();
}
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# ar rcs libmy.a test.o hello.o
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# gcc main.c -L . -lmy -o run
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# ./run
Im a super man
hello world
test
复制代码
参考资料:spa
linux ar 命令的使用说明和实例讲解_linux shell_脚本之家 https://www.jb51.net/article/95627.htm.net
gcc 连接文件 - NeverWA的博客 - CSDN博客 https://blog.csdn.net/NeverWA/article/details/79948049code