GCC编译参数:
-o:指定编译的目标,否则会生成的目标文件名是a.out; gcc main.c -o main
-S:把源文件编译成汇编代码。
-E:只执行预处理
-include:包含头文件,功能如同在源码的语句#include <xxx.h>
-I:(大写i)指定程序包含头文件的路径,一般用于指定第三方库的头文件。
-L:编译时,用于指定程序第三方库的查找路径。
-l:链接时,指定程序需要进行链接的库。注:一般库文件名是libxxx.so,-I指定xxx即可。如-Ixxx
-rpath:程序执行需要指定动态库的路径,但是可以用-rpath参数在编译时指定程序运行时需要加载的库的路径。
-D:程序编译阶段可以定义一些宏,该方法可以让程序有选择性的运行代码。
-0n:这是程序的优化等级。n的范围是0-3。n越大优化等级越高,程序运行的越快。否则越慢,n==0时是关闭优化。等级越高越不利于程序的调试,一般程序调试阶段会关闭优化等级,发布程序会把优化等级设为-O2。
-g:打印程序的调试信息,如果需要使用gdb工具进行调试程序,程序编译的时候,需要加上该参数。
-share:编译的时候尽量使用动态库。(除非只有静态库,没有动态库)
-static:禁止使用动态库,编译的时候只加载静态库,这会导致执行文件很大。
-w:不生成任何的警告信息。
-Wall:生成所有的警告信息。
-fpic:使输出的对象模块可重定位地址方式生成的。
-shared:把对应的源文件生成对应的动态链接库。
动态库的生成:
动态库,简称:动态链接库。只是在程序运行时,需要用到的api才会调用库里的函数。
生成:gcc fun.c -fpic-shared -o libfun.so
静态库的生成:
静态库,在程序编译时,会全部代码加载到可执行程序里。
生成:ar rcs libfunc.a fun.o
静态库和动态库的优却点:
1、相对来说,静态链接的可执行文件一般会比动态链接的可执行文件要大。
2、静态链接的可执行程序一般会比动态链接的可执行文件要快。