动态库静态库制作

文章目录

        • 库(函数库)
        • 动态库
            • 动态库的制作
            • 动态库编译命令:
            • 静态库
          • 静态库的制作

  1. 库(函数库)

    将已经实现的某些功能函数封装到一起形成函数库,方便调用, 并对代码进行加密保护.
    (将功能函数封装,不要将main函数封装进去)

  2. 动态库

    libname.so
    特点:
    (1) 库里面的代码并不会编译到可执行文件中, 动态库的可执行程序相对较小.
    (2) 由动态库编译的程序,需要运行这个程序的系统环境变量中需要有这个库文件,否则运行不了.

动态库的制作
gcc -shared -fPIC -o  libname.so    xx.c   xx.c 

-shared :表示生成的是.so动态库文件
-fPIC:表示代码和地址无关,不需要被不同模块重定位,生成PIC代码。为了达到动态链接的目的。

动态库编译命令:
gcc  main_func.c  -o  main_func   -I  ./   -L  ./   -lfunc

-I 表示链接头文件 后面跟 头文件路径
-L 表示链接函数库 后面跟 函数库路径
-l 库名 lib缩写为l, .so 扔掉

运行程序时需要将库文件拷贝到 /usr/lib 或者/lib 中才能运行.
或者把库所在的路径添加到/etc/ld.so.conf, 执行ldconfig /etc/ld_so.conf

  1. 静态库

    libname.a
    特点:
    (1) 库里面的代码会编译到可执行文件中, 静态库的可执行程序相对较大.
    (2) 由静态库编译的程序,不需要运行这个程序的系统环境变量中有这个库文件,也能运行.

静态库的制作
gcc  .c   -o    .o    -c
ar  cr  libfunc.a  .o  .o  

ar 打包工具, 用来创建修改库,
c 创建库
r 将.o 插入库
静态库编译程序

gcc   main_func.c   -o   main_func_a   -L   ./    -lfunc	

-I 表示链接头文件 后面跟 头文件路径
-L 表示链接函数库 后面跟 函数库路径
-l 库名 lib缩写为l, .a 扔掉

你可能感兴趣的:(Linux-c,linux)