• Linux下创建、查看、提取和修改静态库(*.a)


      先说明一点,静态库文件是由多个目标文件打包而成的,在windows下静态库文件的后缀是.lib,而在linux下静态库文件的后缀是.a(a是archive的缩写,也就是文档文件)。

      废话少说,下面直接进入主题。

      1.创建两个c文件:addition.c 和 multiplication.c

    addition.c

    1 //addition.c
    2 int addition (int a ,int b)
    3 {
    4 int result;
    5 result=a+b;
    6 return result;
    7 }

    multiplication.c

    1 //multiplication.c
    2 int multiplication
    3 {
    4 int result;
    5 result=a*b;
    6 return result;
    7 }

      2.编译C文件得到.o目标文件

    1 $ gcc -c addition.c
    2 $ gcc -c multiplication.c

    其中选项 -c 是让gcc只把源码编译成.o文件。

    接着在当前文件夹中就会发现多处了两个.o文件

    1 $ ls
    2 addition.c multiplication.c addition.o multiplication.o

      3. 用ar命令来创建静态库文件

    1 $ ar cr libarith.a  addition.o multiplication.o

    其中cr就是create的意思,这样就创建了一个libarith.a的静态库文件。

      4.写一个c程序来调用libarith.a库

    在使用库文件之前要先建立一个头文件 header.h,它包含了库文件中实现了函数的声明。

    1 //header.h
    2 #include<stdio.h>
    3 int addition(int a,int b);
    4 int multiplication(int a,int b);

    然后创建一个c程序example.c来调用函数

     1 // example.c
     2 #include "header.h"
     3 int main()
     4 {
     5 int result;
     6 result=addition(1,2);
     7 printf("addition result is :%d
    ",result);
     8 result=multiplition(3,4);
     9 printf("multiplication result is:%d
    ",result);
    10 return 0;
    11 }

    编译example.c

    1 $ gcc example.c libarith.a -o example

    选项 -o 后面的参数是指定编译器生成的可执行文件名,如果没有加 -o的话默认生成的可执行文件名是 a.out

    运行可以行文件example

    1 $./example
    2 addtion result is:3
    3 multiplication result is:12

      5.查看库文件中的目标文件

    1 $ ar t libarith.a
    2 addition.o
    3 multiplition.o

    如果想查看库文件中包含了哪些函数可以用 nm  libarith.a 查看,如果要查看可执行文件需要调用哪些库可以用 lld example 来查看。

     

      6.从库文件中提取目标文件

    1 $ mkdir file
    2 $ cp libarith.a file/
    3 $ cd file
    4 $ ar x libarith.a
    5 $ ls
    6 addition.o
    7 multiplition.o

      7.添加一个目标文件到库文件中

    假设你已经有一个目标文件subtraction.o

    1 $ ar r libarith.a subtraction.o
    2 $ ar t libarith.a
    3 addition.o
    4 multiplication.o
    5 subtraction.o

    如果库文件中已经存在了subtraction.o文件,则会用新的来覆盖原来旧的。

      8.删除库文件中指定的目标文件

    1 $ ar d libarith.a addition.o
    2 $ ar t libarith.a
    3 multiplication.o
    4 subtraction.o

    参考来源:http://www.thegeekstuff.com/2010/08/ar-command-examples/

  • 相关阅读:
    第五天——编码进阶(三)
    vue系列---------vuejs基础学习3.0
    前端随心记---------vuejs基础学习2.2
    前端随心记---------HTML5+CSS系列5.0
    前端随心记---------Ajax
    前端随心记---------前后端验证用户名案例(php,mysql结合)
    前端随心记---------MySQL
    前端随心记---------PHP
    vue系列---------vuejs基础学习2.1
    前端随心记---------HTML5+CSS系列4.0
  • 原文地址:https://www.cnblogs.com/sj-lv/p/3449250.html
Copyright © 2020-2023  润新知