• 静态、动态函数库的设计


    Linux应用程序需要调用外部函数,主要来源:系统调用、函数库

    函数库的链接方式有:静态函数库、动态函数库两种!

       动态函数库:副档名为 .so,文件放置于"/lib/"目录中。  通过内存链接的方式进行调用,避免重复复制,灵活,节省运行空间,主推  --->>>不可独立运行

       静态函数库:副档名为 .a,文件放置于"/usr/lib/"目录中。  是把整个包 括入程序里的,多进程运行时重复复制到所需的地方,程序占存比较大,升级麻烦  --->>>编译后的执行程序可独立运行。

    Linux下的库函数链接方式默认是动态函数库,链接静态库需加上“ -static ”选项。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    命名有两个:链接名(myilb)和库文件命名(libmyilb),其中库文件名=“ lib + 链接名    

      链接名(myilb.o:作为函数库链接,GCC默认链接C函数库,其他库需加“ -l ”,“ gcc  (static)  -lmylib test.c -o test ”(编译用);  

      库文件名(libmylib.so / libmylib.a:最后生成的函数库文件名字,用于存储于系统目录/usr/lib/或lib/内;

     

      动态函数库设计:

    1)gcc -c mylib.c -o mylib.o        //将函数文件"-c"不完全编译,"-o"定名mylib.o链接
    2gcc -share -fPIC mylib.o -o libmylib.so     //制作成动态函数库,“-o”定名为libmylib.so
                                                    //  -fPIC  规定输出对象的方式      -share指明产生动态库
    3)cp libmylib.so /lib                //动态库文件置于指定目录下

         静态函数库设计:

    1)gcc -c mylib.c -o mylib.o        //将函数文件"-c"不完全编译,"-o"定名mylib.o链接
    2ar cqs libmylib.a mylib.o      //制作成静态函数库,定名为libmylib.a
                                                    //  ar cqs 指令是生成库文件的意思
    3)cp libmylib.so /usr/lib                //静态库文件置于指定目录下

    以上动、静态函数库均制作完成!

      欲使用自己制作的库函数,在要使用库函数的.c文件的目录下添加.h文件,里面声明一下要用到的库函数

    eg:" touch mylib.h " -> mylib.h文件内声明" int name (int a, float b); "等 -> 在应用程序中加入头文件" #include <mylib.h> "即可。

    步骤:

    1.制定静/动态函数库;  

    2.库函数文件复制至对应的目录中,并添加 name.h 文件声明库函数;

    3.应用程序中加入自制库函数的头文件" #include <name.h> "即可使用;

    4,编译完成。

    动态:gcc test.c -lmylib -o test;  静态: gcc test.c -static -lmylib -o test;

  • 相关阅读:
    MongoDB查询语句 (增、删、改、查)
    MongoDB简单查询语句
    jquery Select Change事件
    c# 远程监控(4) 接收端 RTP包重组 分屏显示
    c# 远程监控(3) RTP协议 RTP.NET.DLL
    c# 远程监控(1) 大纲
    c# 远程监控(2) 摄像头调研及模拟
    TortoiseGit记住用户名和密码
    winform ListView和DataGridView实现分页
    制作符合平台的CodeSmith代码生产模版
  • 原文地址:https://www.cnblogs.com/hjh-666/p/11196586.html
Copyright © 2020-2023  润新知