创建C中的静态库和动态库以及他们的优缺点

    xiaoxiao2021-03-28  33

    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 #执行该文件 动态库的优点:相较于静态库生成可执行文件较小。 动态库的缺点:一定要将动态库于可执行文件一起移植才可保证运行。

    (生成的执行文件只是调用动态库中的功能函数,而不会包含在执行文件中,因此执行文件会很小,不过,执行文件和动态库分开则不能运行)

    转载请注明原文地址: https://ju.6miu.com/read-664795.html

    最新回复(0)