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

     

  • 相关阅读:
    ps中的一些方法
    extjs 横向滚动条 和 本地排序
    JS JSON.parse() 和 JSON.stringify()
    SQL 同一个表中 根据一列更新另一列(不同行)
    extjs2.2 panel加背景色
    extjs2.2 combo的监听
    ExtJS2.2 form表单提交时不提交emptyText
    Extjs 复制对象
    Extjs 显示或隐藏滚动条
    Extjs2.2 开始时间,结束时间,工期 联动(选二补一),包含日期,天数的互转
  • 原文地址:https://www.cnblogs.com/electronic/p/10920309.html
Copyright © 2011-2022 走看看