静态库与动态库的制作

一。 静态库制作步骤:

1-  将源文件编译生成目标文件   :  gcc -c test.c -o test.o

2-  创建静态库用ar命令,它将很多.o转换成.a     ar crs -o libtest.a test.o     

  (libtest.a静态库文件名)

  静态库文件名的命名规范是以lib为前缀,

  紧接着跟静态库名,扩展名为.a

3-  使用静态链接库 :gcc main.c -L. -ltest(test库名)

  -L 指定库的路径

  -l 指定库的名字

4-  执行./a.out

补充:$nm 静态库文件名:查看静态库里面包含的目标文件 ?

 例子:静态库

根据 add.c,add.h,sub.c,sub.h,制作静态库,通过main.c掉用库中函数

编译过程:

 

也可以使用Makefile工程管理

test:main.o
    gcc main.o -L. -lmylib -o test
main.o:main.c
    gcc -c main.c -o main.o
libmylib.a:add.o sub.o
    ar crs -o libmylib.a add.o sub.o
add.o:add.c
    gcc -c add.c -o add.o
sub.o:sub.c
    gcc -c sub.c -o sub.o

 二。 动态库制作

动态库在程序编译时并不会被连接到
目标代码中,而是在程序运行时才被载入,
因此在程序运行时还需要动
态库存在,因此代码体积较小。
制作步骤:
1-   我们用gcc来创建共享库 : gcc -fPIC -c test.c -o test.o   -fPIC 创建与地址无关的编译程序

  gcc -shared -o libmytest.so.1 test.o

2-  生成库对应的符号链接(这一步可以省略,省略的话上面库文件名以.so结尾)

  ln –s libmytest.so.1 libmytest.so

3-  编译代码  : gcc main.c -L. -lmytest

4-  为了让执行程序顺利找到动态库,有三种方法 :

  (1)  把库拷贝到 /usr/lib  /lib 目录下。 

         注意:注意权限问题。

  (2) 将库的路径添加到环境变量中 (开发测试时使用)

          export LD_LIBRARY_PATH=export LD_LIBRARY_PATH=/home/linux/study/LV4/day3/share   注意动态库的路径,此处是我系统的路径

          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.    把当前路径添加到环境变量中 

      (终端关闭,环境变量就没在了)

例子:依然使用上面的源码创建动态库

 

 要想在此系统下任何地方使用,就需要把生成的动态库 libmylib.so 文件放在 /usr/lib  和 /lib 路径下

 

原文地址:https://www.cnblogs.com/electronic/p/10920309.html