动态链接库、静态链接库

包含头文件和库:
  -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

原文地址:https://www.cnblogs.com/siqi/p/4734305.html