zoukankan      html  css  js  c++  java
  • 静态库与动态库的制作

    一。 静态库制作步骤:

    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 路径下

     

  • 相关阅读:
    如何使用谷歌学术
    联合省选 2021 游记
    生成one-hot的方法
    GraphSAGE
    maven仓库如何引入本地jar包,Maven多种方式打可执行jar包
    DDL任务管理语句
    使用本地EDAS注册多个中台服务,供本地测试使用
    启动轻量级配置及注册中心EDAS
    端口被占用如何解决
    java8中Collectors.groupingBy 用法
  • 原文地址:https://www.cnblogs.com/electronic/p/10920309.html
Copyright © 2011-2022 走看看