一。 静态库制作步骤:
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 路径下