首页 > 系统相关 >linux静态库的制作及问题解决

linux静态库的制作及问题解决

时间:2023-05-09 22:25:42浏览次数:40  
标签:文件 函数 静态 编译 int linux 制作

       首先介绍下分文件,在学习或者开发中,实现一个项目需要实现很多的功能,那么这些功能不可能在一个".c"文件下实现,需要多个".c"文件来共同实现,但是程序的入口只有一个,就体现了分文件编程的重要性,在主函数中调用其余的功能函数。

分文件编程的优点及意义就是:

  • 分模块编程思想
  • 功能责任划分清晰
  • 方便调试
  • 主程序简洁

  偷个图

  

  

   简单说静态库就是把需要的库直接编译加入到可执行文件中,下面正式开始讲解制作一个简单的计算器demo。

 

      1 .准备3个.c文件文件内容如下

            

  1. 把.c编译成.o为静态库准备原材料

 

            

  1. 使用ar工具制作静态库

                    其中ar rcs是固定格式lib前缀和.a后缀也是固定格式mymath才是自己写的库名

               

  1. 创建一个c文件并写主入代码

           

 

  1. 使用gcc编译test.c

        把.c和.o材料放入resource

                         此时发现三个函数未定义这是因为编译器找不到这三个函数的定义此时用gcc加入刚刚完成的静态库重新编译发现成功编译并运行

           

            

  1. 虽然成功运行了但其实还是存在问题的,只是警告等级太低编译器没有警告,用wall显示出所有警告

        

        其中的隐式声明是系统在找不到用户声明的时候会自动声明为int add(int ,int)因此此程序可成功运行

  1. 既然系统不认识这几个函数,那我们就让他认识

         创建一个mymath.h文件存放函数声明不需要实现因为我们已经把实现的代码弄到静态库里了,现在只是系统不认识而已

此时我们再编译会发现没问题且可以运行

        

        

  1. 到这里一个简单的静态库就制作好了,我们把它打包一下

           在当前目录下创建inc存放头文件,lib存放静态库,并重新编译

        其中-I是用来指定头文件的

          

标签:文件,函数,静态,编译,int,linux,制作
From: https://www.cnblogs.com/dwinternet/p/17386475.html

相关文章

  • [Linux]折腾备忘录
    在vi~/.bashrcsource~/.bashrc 添加 exportHOSTIP=$(cat/etc/resolv.conf|grep"nameserver"|cut-f2-d"")exporthttp_proxy="http://$HOSTIP:7890"exporthttps_proxy="http://$HOSTIP:7890"exportall_pro......
  • linux之docker安装RocketMQ
    一、创建namesrv容器dockerpullrocketmqinc/rocketmqmkdir-p/docker/rocketmq/data/namesrv/logs/docker/rocketmq/data/namesrv/storedockerrun-d\--restart=always\--namermqnamesrv\-p9876:9876\-v/docker/rocketmq/data/namesrv/logs:/root/lo......
  • [oeasy]python0050_动态类型_静态类型_编译_运行
    动态类型_静态类型回忆上次内容上次了解了帮助文档的生成开头的三引号注释可以生成帮助文档文档可以写成网页 python3本身也有在线的帮助手册 目前的程序提高了可读性 ​ 添加图片注释,不超过140字(可选......
  • linux-elasticsearch(存储与检索)
    elasticsearch(存储与检索)一、部署elasticsearch1.rpm单点部署1.1下载ES软件包https://www.elastic.co/cn/downloads1.2安装es[[email protected]~]#lltotal301028-rw-------.1rootroot1340Jan909:09anaconda-ks.cfg-rw-r--r--1rootroot308244603......
  • Linux部署Prometheus+Alertmanager并配置企业微信告警
    一、Prometheus告警简介告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。在Prometheus中一条告警规则主要由以下几部分组......
  • Linux部署Prometheus+Alertmanager并配置邮件告警
    一、Prometheus告警简介告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。在Prometheus中一条告警规则主要由以下几部分组......
  • Linux 处理CPU和内存参数的方式总结
    Linux处理CPU和内存参数的方式总结关闭NUMA,关闭透明大页比较简单的方法:vim/etc/default/grub在GRUB_CMDLINE_LINUX里面添加配置:transparent_hugepage=nevernuma=off修改后的配置为:GRUB_CMDLINE_LINUX="resume=/dev/mapper/uos-swaprd.lvm.lv=uos/rootrd.lvm.......
  • rocky linux: 修改sshd的默认端口(Rocky Linux 9.1)
    一,修改防火墙,允许指定的新端口访问[root@img~]#firewall-cmd--zone=public--add-port=31234/tcp--permanentsuccess[root@img~]#firewall-cmd--reloadsuccess[root@img~]#more/etc/firewalld/zones/public.xml<?xmlversion="1.0"encoding="utf-8"......
  • linux RAID磁盘阵列
    目录一、RAID磁盘阵列二、RAID的分类三、奇偶校验四、配置RAIO6过程            一、RAID磁盘阵列原理:全称为独立冗余磁盘阵列,将多个硬盘组合成一个逻辑驱动器,变为一体的。以RAID整体操作,可以提高磁盘高可用性和性能。作用:RAID无论是哪个,......
  • rocky linux:修改hostname(Rocky Linux 9.1)
    一,修改hostname:1,通过hostnamectl命令修改hostname[root@blog~]#more/etc/hostnameblog[root@blog~]#hostnamectlset-hostnameimg[root@blog~]#more/etc/hostnameimg可以看到原本保存在/etc/hostname中的值在用hostnamectl命令处理后发生了变化所以我们也可以......