编译原理与语法(一)——动态库与静态库

2019-10-10  本文已影响0人  王志强_9380

编译流程

预处理

test.c

#include <stdio.h>

int main(){
    printf("hello world!\n");
    return 0;
}

$ gcc -E test.c -o test.i
-E:让gcc在预处理结束后停止编译
-o:指定输出文件
"test.i"文件为预处理后输出的文件

编译

$ gcc -S test.i -o test.s
-S:让gcc在编译结束后停止编译过程
"test.s"文件为编译后生成的汇编代码

汇编

$ gcc -c test.s -o test.o
-c:让gcc在汇编结束后停止编译过程
"test.o"文件为汇编后生成的机器码目标文件

链接

$ gcc test.o -o test
-o:本质上是一个重命名选项。不使用时,默认生成的是a.out文件。这里生成的是可执行文件test

$ ./test
执行后输出hello world!

静态库和动态库

静态库

生成静态库

$ gcc -c test.c -o test.o
$ ar rcs libtest.a test.o
ar:该命令将目标文件打包成静态库。
r:更新或增加新文件到静态库
c:不管库是否存在,都创建一个库
s:创建文档索引,对于文件较大的库,能加快编译时间
这条命令就是把test.o打包成libtest.a静态库
$ ar t libtest.a
使用该命令查看静态库内容

动态库

生成动态库

$ gcc -c test.c -o test.o
$ gcc -shared -fPIC -o libtest.so test.o

上一篇下一篇

猜你喜欢

热点阅读