目录
-
gcc基本参数以及动、静态库的封装
gcc基本参数以及动、静态库的封装
gcc/g++编译过程
gcc/g++编译器在处理.c文件/.cpp文件时会经过四步步骤:
- 预处理:处理所有以#号开头的代码,包括头文件、宏定义、条件编译等,生成.i文件。
gcc -E hello.c -o hello.i
- 编译:将预处理过的.i文件进行语法检查并将其变成汇编语言,生成.s文件。
gcc -S hello.i -o hello.s
- 汇编:将汇编语言变成二进制,生成.o文件。
gcc -c hello.s -o hello.o
- 链接:链接代码所需要用到的其他文件(库文件等),生成.exe可执行文件。
gcc hello.o -o hello
注意:链接生成的目标文件不用写exe后缀。
常用参数
参数 | 作用 |
---|---|
- c | 只编译不链接,生成目标文件.o |
- S | 只编译不汇编,生成汇编代码 |
- E | 只进行预编译,不做其他处理 |
- D macro | 添加macro宏命令 |
- o file | 把输出文件输出到file里 |
- l dir | 在头文件的搜索路径列表中添加dir目录(i的大写) |
- I library | 链接名为library的库文件 (L的小写) |
- L dir | 在库文件的搜索路径列表中添加dir目录 |
- static | 链接静态库 |
- shared | 生成共享目标文件。用于建立动态库 |
静态库封装
Linux和Windows的静态库文件均可以.a结尾。
//生成方法:
gcc -c fun2.c fun3.c //将需要封装的fun2.c和fun3.c编译成相应的二进制文件
ar -r libfun.a fun2.o fun3.o //将fun2.o和fun3.o封装到fun.a文件中
//调用方法:
gcc main.c –lfun -L. –o main //将main.c文件链接fun静态库,生成main.exe文件
注意:静态库的命名方式为libxxx.a
动态库封装
Linux中动态库文件一般以.so结尾,Windows中动态库文件一般以.dll结尾。
//生成方法:
gcc fun.c -I. -fPIC -shared -o fun.dll //将fun.c生成生成动态库文件fun.dll
//调用方法:
gcc main.c -I. -L. -lfun -o main //将main.c链接动态库生成main.exe可执行文件