zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/sj-lv/p/3449250.html
Copyright © 2011-2022 走看看