目录

一,库的概念

二、动态库的使用步骤

三、静态库的使用步骤

四,动态库和静态库的区别


一,库的概念

库: 把代码或功能模块的一种封装形式
    库里面把代码或功能模块封装,它只提供它的接口说明,以及二进制代码库。
    库用来实现一个源代码文件,调用二进制代码的一种方式。
    优点:(1)用来共享某个功能,却不用担心泄漏源代码。
         (2)运行时可以直接加载使用,且只需要一份。
         (3)方便程序的更新和维护。
         
         
    库一般又分为两种: 动态库、静态库


二、动态库的使用步骤


    1,编辑源代码
        xxx.c  功能函数的实现
        xxx.h  函数以及数据类型的说明
    2,生成动态库
        (arm-linux-)gcc  -shared  -fpic    xxx.c   -o   libxxx.so
                         动态库   与位置无关              xxx是库名
    3,生成可执行文件
        (arm-linux-)gcc  main.c  -o main -I/your/head/path  -L/your/lib/path -lxxx
        注意: 生成的main这个可执行文件,并没有包含libxxx.so的内容,只是说明了在执行的
        时候需要用到这个库
        
    4,把可执行文件main和需要用到的库都下载到开发板上去
    
        LD_LIBRARY_PATH: 是一个环境变量,以:分开,用来指定动态库的搜索路径
        环境变量: 就是所有程序的公共变量
        
        我们把动态库拷贝到动态库的搜索路径中去,或者新增一个动态库搜索路径
            export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:路径
            把上面这条命令写入启动文件
            
            cp  libxxx.so  /usr/lib 
            chmod +x main 
            ./main
            


三、静态库的使用步骤


    1, 编辑源代码文件 
        a.c  b.c 
        a.h  b.h 
        
    2,把各源代码文件编译成.o文件 
        (arm-linux-)gcc  -c  a.c  -o   a.o
        (arm-linux-)gcc  -c  b.c  -o   b.o 
        
    3,用ar命令把所有的.o文件编译生成一个静态库 
        (arm-linux-)ar  -rc  libxxx.a   a.o   b.o  
                            xxx是库名
                            
    4,生成可执行文件 
        (arm-linux-)gcc  main.c  -o main -I/your/head/path  -L/your/lib/path -lxxx
        注意:生成的main这个可执行文件,已经包含了libxxx.a的内容,可以直接运行
        
    5,把main下载到开发板,直接运行
        chmod +x main 
        ./main
        

四,动态库和静态库的区别

静态库:程序在链接阶段,会将静态库的代码复制到可执行程序中。在可执行程序运行时,直接调用静态库中的代码。

动态库:程序在链接阶段,没有将动态库的代码复制到可执行程序中,仅仅将动态库的一些信息(例如动态库的名称)复制到可执行程序中。在可执行程序运行时,由系统将动态库的代码动态加载到内存中供程序调用。

                
            
                         
                         

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐