目录
- GCC编译器详解
- gcc的编译流程
- gcc编译细节
- 静态库(gcc多个文件链接)
- 动态库
GCC编译器详解
因为后面我需要用到Makefile来管理文件,因此不得不先学习一下gcc的使用 ,下面是一些具体的使用方法
gcc的编译流程
gcc编译的时候对应的文件后缀解释,其中.a代表静态库,.so代表动态库。其他的都是我们所熟知的,就不做过多赘述。
在我们使用gcc的时候,一般都需要把命令执行位置调整到.c文件对应的目录下面
gcc编译细节
gcc -E main.c -o main.i
如上所示我们可以使用gcc工具将.c文件预处理成.i文件,其中E是将文件进行预处理,o是输出一个处理后文件,如果不加-o是不会输出对应的文件只会打印在终端,后面的两个不加-o也可以自动生成对应的文件。
gcc -S main.c -o main.s
如上是将.c文件处理成.s汇编文件。
gcc -c main -o main.o
gcc -c a.c b.c c.c #同时编译多个文件
如上是将.c文件编译生成.o可重定位的目标程序文件。
gcc main.c
gcc main.c -o main #指定一个名字
不需要制定任何过程直接把三个过程全部执行完毕并生成对应的可执行文件。
静态库(gcc多个文件链接)
如果main.c需要用到其他文件的话,此时有以下两种方法生成最终的可执行文件
#方法一
ar -r [lib.a] [a.o] [b.o] #lib是自定义库的名字,.o是需要链接成库文件的集合
gcc main.c lib.a -o main #编译main.c需要用到lib这个静态库文件。
gcc main.c -o main -l[库名] -L[库路径] #跟上面这一行实现结果一样,注意-l和-L后面不能留空格
#方法二
gcc main.o a.o b.o -o main #把所有需要链接的.o编译即可
动态库
gcc编译动态库方式如下,现将.c文件编译成二进制.o文件,然后用-share将.o编译成一个动态库文件,最后将mian.c和动态库文件一起编译成可执行文件,注意-l和-L后面不能留空格。
如果想继续学习makefile详解,可以看下一篇文章