Linux下库一般放在/usr/lib/目录下:
静态库(.a)与动态库(.so)。
Windows下为(.dll)。他集成了静态库和动态库的有点。
库的名字不包括前面的lib:
libtest.so,这个库的名字为test。
另外,库不需要加头文件,但需要编译生成目标文件。
=======================================================
制作静态库:
1.创建一个.c的函数功能文件,创建另一个main.c文件使用该文件,编译编写的功能库.c文件生成目标文件;
2.ar -cqs -o libtest.a test.o #c:创建静态库。 q:快速。 s:加上索引。 o:输出。后面加生成静态库名字要加前缀lib。这里的test.o就是想要加入静态库的test.c文件生成的目标文件。后面还可以加入更多目标文件。
3.gcc main.c libtest.a -o test #一定要先写主函数文件,把静态库加到最后面。生成可执行文件test。
4. ./test
静态库的优点:可执行文件在系统任意位置可运行,可执行文件包含静态库文件。
静态库的缺点:库文件巨大且生成可执行文件占用空间较大(执行文件中包含主函数的库函数中的所有函数,而非只包含主函数所调用的函数)。
=============================================================
制作动态库:
1.创建一个.c的函数功能文件,创建另一个main.c文件使用该文件,编译编写的功能库.c文件生成目标文件;
2.gcc -fPIC -shared test.o -o libtest.so #生成动态库,fPIC(只有f小写):与地址无关。 shared:生成动态库。 o:输出。(test.o为功能文件的目标文件)
3.gcc main.c -L ./ -l test -o d_test #-L:指定动态库的路径,。/当前路机 -l:指定动态库的名字test,该步为链接动态库。(test为生成的动态库文件名)
4.export LD_LIBRARY_PATH=./ #用来指定一个变量的值的,变量名一定是LD_LIBRARY_PATH。
5. ./d_test #执行该文件
动态库的优点:相较于静态库生成可执行文件较小。
动态库的缺点:一定要将动态库于可执行文件一起移植才可保证运行。
(生成的执行文件只是调用动态库中的功能函数,而不会包含在执行文件中,因此执行文件会很小,不过,执行文件和动态库分开则不能运行)