gcc
简单讲解和常用参数解析
.a
静态库 (archive)
.c
C源代码(需要编译预处理)
.h
C源代码头文件
.i
C源代码(不需编译预处理)
.o
对象文件
.s
汇编语言代码
.so
动态库
$gcc
-g -Wall hello.c -o hello
-Wall
开启编译器几乎所有常用的警告
-g
表示在生成的目标文件中带调试信息
-o
后面为指定生产的机器码的文件名
$
gcc -Wall hello.c hello_fn.c -o newhello
编译多个源文件,且在同一目录
$
gcc -Wall calc.c /usr/lib/libm.a -o calc
/usr/lib/libm.a
静态库的位置,及库名;也可写成下面格式
$
gcc -Wall calc.c -lm -o calc
-lm
等价 /usr/lib/libm.a 或 搜索路径 libm.so libm.a
-lNAME
等价搜索路径的 libNAME.a 或 libNAME.so
$
gcc -E hellou.c -o hellou.i
-E
指示编译器只进行编译预处理
$
gcc -S hellou.c
-S
指示编译器生成汇编语言代码然后结束
$
gcc -c -Wall first.c second.c
-c
只生成 .o 的对象文件
$
ar -r libhello.a first.o second.o
-r
可以创建一个新库并将对象文件插入
$
gcc -c -Wall -fpic sh1.c sh2.c
-fpic
使生成的对象模块采用浮动的(可重定位的)地址。
pic
代表“位置无关代码”(position independent code)。
$
gcc -Wall -shared sh1.o sh1.o -o Esh.so
-shared
指定生成动态连接库,linux专有
$
gcc -Wall -fpic -shared sh1.c sh1.c -o Esh.so
头文件默认路径:/usr/local/include/
和 /usr/include/
库文件默认路径:/usr/local/lib/
和 /usr/lib/
-Ldir
添加动态、静态库的搜索路径(dir),非系统默认库必须在命令中指出库名
-Idir
添加头文件的搜索路径(dir),头文件无需在命令中指出,头文件可以任意移动!(详解查预编译)
(链接库,一:-Ldir
libNAME.so 或 libNAME.a;二:dir/libNAME.so 或 dir/libNAME.a)
-I-
就是取消前一个参数的功能,所以一般在-Idir之后使用
-static
此选项将禁止使用动态库。
$gcc
-g -Wall -I/usr/local/include/python2.5/ /home/afa/lib/python2.5.so EmbedFunc.c -shared -o EmbedFunc.so
$gcc
thread.c -o thread -lpthread
libpthread.a不是
Linux 系统默认的库,使用时需加库命。
原文地址:http://blog.csdn.net/nyist327/article/details/41866293