zoukankan      html  css  js  c++  java
  • linux下的制作静态库并使用它

    静态库所要用的源文件
    文件 fred.c
     
    #include <stdio.h>
     
    void fred(int argc)
    {
        printf("void fred(int argc) | argc is [%d] ", argc);
    }
     
    文件 bill.c
     
    #include <stdio.h>
     
    void bill(char * argv)
    {
        printf("void bill(char * argv) | argv is [%s] ", argv);
    }
     
    编译库文件所需要的目标文件
    gcc -c bill.c -o bill.o
    gcc -c fred.c -o fred.o
     
    上述命令中的 -c 只是对源程序进行编译。而不是去进行链接。
     
    将目标文件进行打包
    ar cvr libMylib.a bill.o fred.o
     
    编写一个调用库文件的源文件
     
    头文件 myLib.h
     
    void fred(int argc);
    void bill(char * argv);
     
    main 函数文件 staticLibTest.c
     
    #include <myLib.h>
    #include <stdlib.h>
     
    int main (int argc, char ** argv)
    {
        fred(argc);
        bill(argv[0]);
     
        exit(0);
    }
     
    编译 staticLibTest.c,得到目标文件 staticLibTest.o。使用的命令如下:
    gcc -c staticLibTest.c
     
    最后一步,将staticLibTest.o 和使用的“第三方”的库文件进行链接,得到可执行程序.
    gcc -o staticLibTest staticLibTest.o -L. -lMylib
    命令说明:-L. 表示程序使用的第三方库所在的路径。-lMylib表示其使用的第三方库文件的名称。名称的获取方式为去掉文件名的前三个字符lib,去掉后面的.a这样的后缀名。
    或者
    gcc -o staticLibTest1 staticLibTest.o libMylib.a 
     
    程序运行结果
    ./staticLibTest
    void fred(int argc) | argc is [1]
    void bill(char * argv) | argv is [./staticLibTest]
  • 相关阅读:
    [luogu3334]抛硬币
    [luogu3706]硬币游戏
    [luogu4548]歌唱王国
    [hdu4652]Dice
    [atAGC013F]Two Faced Cards
    [atAGC045F]Division into Multiples
    [atAGC045E]Fragile Balls
    [atAGC045D]Lamps and Buttons
    [luogu5574]任务分配问题
    [luogu4331]数字序列
  • 原文地址:https://www.cnblogs.com/babyha/p/5201385.html
Copyright © 2011-2022 走看看