Linux下使用gcc生成静态库.a和调用(图文并茂,坑已踩完)

简 述:  在Linux系统下,使用gcc来编译,生成静态库,且调用静态库.a文件,生成可执行程序。此处例子实际:使用g++9.2在mac平台下完成这个知识点的教程。在 下一篇 踩坑生成动态库的.so制作和 使用。


编程环境:

💻: MacOS 10.14.6 (18G103) 📎 gcc/g++ 9.2.0


静态库概念:

静态库 是在可执行程序运行之前就已经加入到执行代码中,成为执行程序的一部分;静态库的后缀一般是 .a作为后缀。

库: 二进制文件;是加密之后的.c/.cpp的文件

静态库: .lib 或 .a


前期铺垫:

创建如下例子几个文件:注意是.cpp文件,里面写的也是c++的语法。


将.cpp生成.o:

  • 执行命令 g++-9 -c *.cpp 将所有.cpp 文件都编译不链接生成对应的.o;且将.o文件都存放于lib文件夹下。

     g++-9 -c *.cpp  //注意 -c 是小写,非大写
     mv *.o ./lib 
    

将.o生成.a:

  • 执行命令 ar cr libxxx.a ./lib/*.o 将所有的.o文件全部归档,然后替换创建为一个静态文件.a;ar 是GNU 归档工具,rcs 表示(replace and create)

    #用法:ar rcs 静态库的名字 原材料  
    #ar -archive
    
    ar cr libxxx.a ./lib/*.o  //生成静态库文件.a
    mv *.h ./include          //将所有的.h文件放在include文件夹下
    mv libxxx.a ./lib         //将.a文件也放在lib文件夹下
    

    此时的工程结构如下:


链接库,调用静态函数.a:

  • 执行命令 g++-9 -I ./include -L ./lib -lxxx -o mainApp 调用生成的.a文件,并且链接,生成可执行程序mainApp

    • 注意,所要生成的.a文件的名字前三位必须是lib,否则在链接的时候,就可能导致找不到这个库
    • 命令规则: libxxx.a红色部分为固定的格式,中间的xxx才是库名
    • -l 为调用的库的名称(-l 后面没有空格,直接加库名)
    #-I 为指定的库的头文件的路径
    #-L 为指定的库的二进制文件文件
    #-l 为调用的库的名称(-l 后面没有空格,直接加库名)
    #-o 输出文件,生成的可执行程序的名称
    
    g++-9 -I ./include -L ./lib -lxxx -o mainApp
    
  • 此时工程的结构:

  • 运行成功可以查看.a文件里面的内容,本质是把其余的.o文件全部塞到了.a里面

    #成功之后,可以查看.a里面的包含具体的所有的.o文件 
    nm libmytest.a
    

运行可执行程序成功:

运行命令 ./mainApp,执行可执行程序,能够看到结果输出,表示成功。


源码下载:

04_make_so_a

欢迎 star 和 fork 这个系列的 linux 学习,附学习由浅入深的目录。


总结:

看起来很简单,殊不知,纸上学来终觉浅, 还是亲自实现一番才以记忆深刻。若是成功的白嫖到了这篇文章,可以点个赞, 给我留个言,鼓励一下。你的加油,我们持续不断的出新的文章,那啥,白嫖一时爽,一直白嫖一直 。🥺


系列地址:

linuxExample 【04_make_so_a】
欢迎 starfork 这个系列的 Linux/Unix 学习,附学习由浅入深的目录。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值