首先介绍一下gcc各种参数的含义:
-o:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
1: gcc -c -fPIC *.c
生成与位置无关的 .o 文件(目标文件):
-fPIC表明使用地址无关代码。
2: gcc -shared -Wl -o libmyab.so a.o b.o
-shared 参数使其生成是动态库而不是普通执行程序。
-Wl选项告诉编译器将后面的参数传递给链接器。
3: gcc -shared -Wl,-soname,libmyab.so.1 -o libhello.so.1.10 a.o b.o
soname是一个链接库的名字,只包含共享库的主版本号,主版本号一致即可保证库函数的接口一致,因此应用程序的.dynamic段只记录共享库的soname,只要soname一致,这个共享库就可以用。
4: gcc world.c -DDEBUG -o app
-D选项告诉编译器在编译时增加对-D后面的宏的定义
5: ar rcs libxxx.a xx1.o xx2.o
创建一个静态库
参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。
参数c:创建一个库。不管库是否存在,都将创建。
参数s:创建目标文件索引,这在创建较大的库时能加快时间。
6: gcc -I./include main.c dict.c -o app
-I:指定头文件目录