gcc (选项) (参数)
选项:
-o:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
-fPIC : 该选项用于生成位置无关的代码
-shared : 将-fPIC生成的位置无关的代码作为动态库,一般情况下,-fPIC和-shared都是一起使用的。生成SO文件,共享库
参数:需要编译的文件
其中选项和参数位置可调换
一.基础使用方法
主函数所在文件include其他文件时 gcc编译时不需要列出已经include的文件,include可以是*.h,也可以是*.c,但最好不要include*.c。
1.如果main()所在文件main.c include所有*.c 编译可用
gcc -o test main.c
2.如果main()所在文件main.c 只include a.h, b.h, c.h ,则编译需要用a/b/c .h对应的.c一起编译
gcc -o test main.c a.c b.c c.c
3.如果没有include只有extern,extern的函数或变量在a.c中编译要加入a.c
gcc -o test main.c a.c
需要说明的是:gcc编译不需要显式的+ ''*.h''文件,会自动根据 ''*.c''和include ''*.h''的路径 自动寻找对应的"*.h"
可参考http://www.cnblogs.com/zhangfeionline/p/5861721.html
两种多文件编译方式
a.如上所写,gcc中列出多个源文件一起编译
b.单个文件分别编译为*.o,再将*.o连接
gcc -c testfun.c #将testfun.c编译成testfun.o
gcc -c test.c #将test.c编译成test.o
gcc -o testfun.o test.o -o test #将testfun.o和test.o链接成test
二.编译生成动态连接库.so
其中jdi.o为待编译文件,当然也可以是jdi.o的源文件jdi.c直接编译为jdi.so
注意jdi.c编译为jdi.o时也需要 -fPIC