包含头文件和库:
-Idir: 指定编译查找头文件的目录,常用于查找第三方的库的头文件,例:gcc test.c –I../inc -o test。
-Ldir : 指定链接时查找lib的目录,常用于查找第三方库。
-llibrary 指定额外链接的lib库
宏定义
-DMACRO 以字符串"1"(默认值)定义 MACRO 宏。
-DMACRO=DEFN 以字符串"DEFN"定义MACRO 宏,注意中间不能有空格。
-UMACRO 取消对 MACRO 宏的定义。
调试和可执行文件形式:
-g 指示编译器,在编译的时产生调试信息。
-ggdb 尽可能的生成gdb的可以使用的调试信息(比-g生成的信息更多些)。
-static 禁止使用动态库,编译得到的程序会比较大,但可以自由运行。
-share 尽量使用动态库,所以生成文件比较小,但是需要系统由动态库。
告警选项
-Wall 产生尽可能多的警告信息,建议始终带上
-Werror 将所有的警告当成错误进行处理
静态链接库:
1.通过gcc –c命令将stack.c编成stack.o
gcc -c stack.c
2.通过ar命令将stack.o封装成libstack.a
ar cr libstack.a stack.o #多个.o打包成.a文件
3.链接
gcc -o run main.c -L.(库目录) -lstack(库)
库名: libstack.a
库:stack(去掉lib和后缀得到)
#可以合并多个.o文件
ar cr libtest.a first.o second.o third.o
#查看打包了哪些.o文件
ar -t xxx.a
#动态链接库
1.通过gcc –c命令将stack.c编成stack.o
gcc -c stack.c
2. gcc -shared -o libstack.so stack.o
3.链接
gcc -o run main.c -L.(库目录) -lstack(库)
gcc -o run main.c -L. -lstack
gcc -o run main.c -L. -lstack -Wl,-rpath,dir1
4.指定动态链接库的地址
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
5.运行
./run
#查看需要的动态链接库
ldd run
#动态链接库搜索目录
1. 环境变量 LD_LIBRARY_PATH
2. 从/etc/ld.so.conf找(用ldconfig刷新缓存)
3. 默认的系统路径, 先是/lib(/lib64)然后是/usr/lib (/usr/lib64)
4. 还可以编译时指定搜索路径
-Wl,-rpath,dir1:dir2:...:dirN (多个冒号间隔)
#
ldconfig -v | grep b.so
http://www.cnblogs.com/TianFang/archive/2013/01/19/2867296.html
http://www.cnblogs.com/TianFang/archive/2013/01/18/2866952.html
http://www.cnblogs.com/TianFang/archive/2013/01/19/2867296.html
http://m.blog.csdn.net/blog/liuxing_lanyue/20067423