zoukankan      html  css  js  c++  java
  • linux静态库的生成与使用(转)

     

    库是一种软件组件技术,库里面封装了数据和函数。

    库的使用可以使程序模块化。
    Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。
    Linux通常把库文件存放在/usr/lib或/lib目录下。
    Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。
    在程序中使用使用静态库和动态库时,他们载入的顺序是不同的。
    静态库的代码在编译时就拷贝的应用程序中,这样的优点是节省编译时间。
    动态链接库时程序在开始运行后调用库函数时才被载入。
     
    静态库的创建和使用:
    1、在一个头文件种声明静态库所导出的函数。
    2、在一个源文件种实现静态库所导出的函数。
    3、编译源文件,生成可执行代码。
    4、将可执行代码所在的目标文件加入到某个静态库中,并将静态库拷贝到系统默认的存放库文件的目录下。
    下面通过一个例子来说明:mylib.h种存放的是静态库提供给用户使用的函数的声明,mylib.c实现了mylib.h种声明的函数。
     
    头文件:mylib.h
    #ifndef _MYLIB_H_
    #define _MYLIB_H_
     
    void weclome(void);
    void outString(const char *str);
     
    #endif

    源文件:mylib.c

    #include "mylib.h"
    #include 
     
    void welcome(void)
    {
        printf("welcome to libmylib
    ");
    }
     
    void outString(const char *str)
    {
        if(str != NULL)
            printf("%s
    ", str);
    }

    1>编译mylib.c生成目标文件:gcc -o mylib.o -c mylib.c

    2>将目标文件加入到静态库中:ar rcs libmylib.a mylib.o
    3>将静态库copy到Linux的库目录(/usr/lib或者/lib)下:
    cp libmylib.a /usr/lib/libmylib.a 
    编写调用库函数的测试程序test.c:
    #include "mylib.h"
    #include 
     
    int main(void)
    {
        printf("create and use library:
    ");
        welcome();
        outString("it's successful
    ");
     
        return 0;
    }

    4>使用静态库编译:gcc -o test test.c -lmylib

    这里注意,编译时无需带上前缀和后缀。
    5>运行可执行程序test: ./test
    create and use library:
    welcome to libmylib
    it's successful

    在Linxu下,可以使用ar命令来创建和修改静态库。

    这些在linux下man ar一下就可以得到参数,这里说明几个常用的
    d:从库中删除成员文件。
    r:在库中加入成员文件,若存在,则替换。
    c:创建一个库。
    s:无论ar命令是否修改了库内容,都强制重新生成库符号表。
    其他的命令用时再man。
     
    上面这五步是基本的使用,还有需要的话,就要深入的学习了。
     
  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/the-tops/p/5990509.html
Copyright © 2011-2022 走看看