C库的制作

1.库的概念:库是一种可执行的二进制形式;

2.分类

  1》静态库

    ①、在程序编译时会被连接到目标代码中;

    ②、程序运行时不再需要该静态库;

    ③、体积较大;

  2》动态库/共享库

    ①、在程序编译时不会被连接到目标代码中,而是在程序运行时才被载入内存中;

    ②、在程序运行时需要动态库存在;

    ③、代码体积较小;

 

3.库的制作

  1》静态库的制作:

    ①、创建静态库的源代码:

            testlib.c

      int fun(int a){

         return a * a;

      }

    ②、将静态库的源代码编码成.O文件

      gcc -c -o testlib.a testlib.o

    ③、将.o文件制作成静态库

      ar  crs libtest.a libtest.o

    ④、测试静态库是否创建成功

       #include <stdio.h>

       #include "testlib.h"

       int main(void){

        int n;

        scanf("%d", &n);

        printf("%d\n", fun(n));

      }

       编译上面的代码:gcc -o main main.c -ltest -L.

        执行:./main

  2》动态库的制作:

    ①、创建动态库的源代码:

      testlib.c

      int fun(int a){

        return a*a;

      }

    ②、将动态库的源代码编程成.o文件:testlib.o

      gcc -fPIC -Wall -c testlib.c

    ③、将.o文件制作成动态库;libtest.so

      gcc -shared -fPIC -o libtest.so testlib.o

    ④、测试动态库libtest.a是否创建成功

      #include <stdio.h>

      #include "testlib.h"

      int main(void)

      {

        int n;

        scanf("%d", &n);

        printf("%d\n", fun(n));

      }

      ----->>编译上面的测试代码:gcc -o main main.c -ltest -L.

      ----->>装载动态库:

      ---------------------》》第一种方法:将动态库放入系统库目录下:

              sudo cp libtest.so  /lib

      ---------------------》》第二种方法:将动态库路径加入到库的配置文件:/etc/ld.so.conf.d/libc.conf

             ----》打开配置文件:sudo vi /etc/ld.so.conf.d/libc.conf

             ----》写入库路径:

             ----》使之生效:sudo ldconfig

      --------------------》》第三种方法:将动态库路径加入到环境变量中

             export LD_LIBRARY_PATH=动态库的路径

      --------------------》》执行:./main

时间: 2024-10-06 10:05:21

C库的制作的相关文章

静态库的制作详解

静态库的制作 1   静态库的存在形式: .a 和.framework 动态库的存在形式:.dylib 和.framework 2   静态库和动态库的区别: 静态库在链接的时,会被完整的复制到可执行文件中,被使用多次,就由多份拷贝. 动态库则不会被复制,只有一份,程序运行时,动态加载到内存,系统只加载一次,多个程序共用 但是:程序中如果使用自己的动态库是不允许上架的. 3   使用静态库,可以保护核心代码,将MRC的项目打包成静态库,就可以在ARC环境下直接使用. 4   静态库的特点: .a

静态函数库的制作和使用

C语言的函数库是多组经过验证的常用函数的集合,编写C语言程序时使用库函数,既可以提高程序运行效率,又可以提高编程质量,使用方法如#include 和#include. 根据使用库函数时,函数库加载时机的差异,将函数库分为静态函数库和动态函数库,具体差异是:C语言程序如果使用静态函数库的函数,那么整个函数库的代码都会和C语言程序一起编译成可执行代码,程序的体积会膨胀:如果使用动态函数库的函数,则C语言程序只会和函数库文件名以及函数名一起编译成可执行代码(不编译函数代码),运行时去查找函数库文件和函

Linux下C++静态库、动态库的制作与使用

参考博文:C++静态库与动态库 >> 静态库 1. 静态库的制作 a) 编辑 name.cpp 和name.h文件 b) $g++ -c name.cpp //注意带参数-c,否则直接编译为可执行文件 c) $ar -crv libname.a name.o  //通过ar工具将目标文件打包成.a静态库文件 2静态库的使用 a) 所用程序中包含静态库的头文件 b)$g++ useStaticLibray -L ./StaticDirectory -l name //只需要在编译的时候,指定静态

静态库与动态库的制作

1.相关知识 (1).不管是制作静态库还是动态库,都得对.o文件进行打包: (2).在/lib64目录下,静态库文件.a,动态库文件.so 2.静态库 (1).gcc -c add.c    ------> 生成add.o文件,其中通过参数(-c): (2).静态库由命令ar创建:  ar  -cr  add.a  add.o   (3).静态库的编译有两种方法:   a:gcc test.c -o test -L. add.a     //每次都得在编译时加上-L. 静态库文件: b.将.a文

动态函数库的制作和使用

>>>>>>接静态函数库的制作和使用>>http://www.cnblogs.com/hfxin2001-eric-daddy/p/5809010.html 2 动态函数库的制作和使用 动态函数库的制作步骤可以用下图来描述,具体包括 (1)  编写函数的.c文件(例如add.c.sub.c.mul.c和div.c) (2)  编写Makefile,然后make,实现函数的编译和归档入库 函数的编译:使用gcc –c add.c -fPIC只编译不链接函数.c

iOS开发笔记--静态库的制作与使用

一.iOS项目中库的使用 1.开源库 * 公开源代码,能看到具体实现 *比如SDWebImage.AFNetworking 2.闭源库 * 不公开源代码,是经过编译后的二进制文件,看不到具体实现 * 主要分为:静态库.动态库(注意自己制作的动态库不能上传到appStore) 二.本文首先讲的的是静态库的制作以及使用 1.新建静态库项目 新建静态库项目选择cocoa Touch Static Library 然后编写核心代码 2.分别在真机和模拟器下编译生成对应环境的静态库 (注意真机文件夹下得静

Linux下静态库和动态库的制作与使用

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Times New Roman", serif } h2 { margin-top: 14.0pt; margin-right: 0cm; margin-bottom: 14.0pt; margin-left: 28.8pt;

关于动态库的制作介绍

今天简单的介绍下动态的制作,主要介绍windows平台下借助vs进行动态库制作和使用,以及linux下动态库的制作和使用,闲话少说下面开始吧 在windows环境下进行制作 1.首先打开vs2013,新建一个win32控制台项目 第二步,新建选择动态库(dll)选项,生成空项目 第三步:将提供的源码文件添加到项目中,其中keymng_msg.h和keymng_msg.c是最外层封装的文件,底层实现是另外两个文件,所以只需要给用户提供动态库和keymng_msg.h就可以调用. 第四步:在需要导出

静态库的制作与使用

静态链接库与动态链接库都是共享代码的方式.如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的.ExE文件中了.但是若使用动态链接库,该动态链接库则不必被包含在最终的EXE文件中,EXE文件执行时可以“动态”的引用和卸载这个与EXE独立的动态链接库文件.静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他动态链接库或者静态库,而在动态链接库中还可以包含其他的动态或静态链接库.本次就针对静态库的制作和使用进行讲解. 首先静态库有两种,一种是对函数产生的静态库,