aix 的c库为什么都是静态库_Linux静态库生成指南

06ac6410f98dc9d776209c9a6bf54b15.png

Linux上的静态库,其实是目标文件的归档文件。
在Linux上创建静态库的步骤如下:

  1. 写源文件,通过 gcc -c xxx.c 生成目标文件。
  2. ar 归档目标文件,生成静态库。
  3. 配合静态库,写一个使用静态库中函数的头文件。
  4. 使用静态库时,在源码中包含对应的头文件,链接时记得链接自己的库。

下面通过实例具体讲解。

写源文件,生成目标文件。

第一个源文件 my_print.c

#include <stdio.h>void cout(const char * message)
{fprintf(stdout, "%sn", message);
}

源文件2: my_math.c

int add(int a, int b)
{return a + b;
}int subtract(int a, int b)
{return a - b;
}

使用gcc,为这两个源文件生成目标文件:

gcc -c my_print.c my_math.c

我们就得到了 my_print.o 和 my_math.o。

归档目标文件,得到静态库。

我们使用 ar 将目标文件归档:

ar crv libmylib.a my_print.o my_math.o

我们就得到了libmylib.a,这就是我们需要的静态库。

上述命令中 crv 是 ar的命令选项:

  • c 如果需要生成新的库文件,不要警告
  • r 代替库中现有的文件或者插入新的文件
  • v 输出详细信息

通过 ar t libmylib.a 可以查看 libmylib.a 中包含的目标文件。

可以通过 ar --help 查看更多帮助。

注意:我们要生成的库的文件名必须形如 libxxx.a ,这样我们在链接这个库时,就可以用 -lxxx
反过来讲,当我们告诉编译器 -lxxx时,编译器就会在指定的目录中搜索 libxxx.a 或是 libxxx.so

生成对应的头文件

头文件定义了 libmylib.a 的接口,也就是告诉用户怎么使用 libmylib.a。

新建my_lib.h, 写入内容如下:

#ifndef __MY_LIB_H__
#define __MY_LIB_H__int add(int a, int b);
int subtract(int a, int b);void cout(const char *);
#endif

测试我们的静态库

在同样的目录下,建立 test.c:

#include "my_lib.h"int main(int argc, char *argv[])
{int c = add(15, -21);cout("I am a func from mylib ...");return 0;
}

这个源文件中引用了 libmylib.a 中的 coutadd 函数。

编译test.c:

gcc test.c -L. -lmylib

将会生成a.out,通过 ./a.out 可以运行该程序。说明我们的静态库能正常工作。

上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径, -lmylib 告诉 gcc 生成可执行程序时要链接 libmylib.a

通过makefile自动化

上面的步骤很繁琐,还是写个简单的makefile吧,内容如下:

.PHONY: build testbuild: libmylib.alibmylib.a: my_math.o my_print.oar crv $@ my_math.o my_print.omy_math.o: my_math.cgcc -c my_math.cmy_print.o: my_print.cgcc -c my_print.ctest: a.outa.out: test.cgcc test.c -L. -lmylib

makefile写好后,运行 make build 将会构建 libmylib.a, 运行 make test 将会生成链接 libmylib.a 的程序。

如果你在 windows 上使用 mingw,和Linux下生成静态库的方法是一样的。

嵌入式物联网资料分享交流群:707159742 入群有全套学习视频资料电子书免费赠送!

参考资料:

静态库的制作_Linux库的实现与应用_嵌入式开发工程师​www.makeru.com.cn
0f4b73262858eebcf9d29ba3231114f9.png
动态库的制作_Linux库的实现与应用_嵌入式开发工程师​www.makeru.com.cn
0f4b73262858eebcf9d29ba3231114f9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么从什么写短句_新年新气象跨年了,准备好发什么说说了吗

happy new year今天是2020年的最后一天我们即将跨过0点步入2021年喽欢喜&#xff0c;激动&#xff0c;感慨&#xff0c;顿时涌上心头在这有意义的时刻小新觉得极为有必要发跨年朋友圈概括小新这一年的功绩为这一年画上完美的句号嘿嘿但现在很是纠结到底该发点儿啥呢OMG!选择太多…

计算机显卡960,2015显卡开年之作!NVIDIA GTX960首测

【PConline 首发评测】回顾2014年显卡的发展&#xff0c;GTX980/970可谓是其中最浓墨重彩的一笔&#xff0c;超高的能效比的吸引力实在太大&#xff0c;但是作为旗舰级产品并不是每一个人都享用的起的。在经过长达4个月的等待之后&#xff0c;我们终于等来的Maxwell架构的中端主…

mllib逻辑回归 spark_《Spark大数据分析实战》笔记

写在前面&#xff1a;此书很棒&#xff0c;但需要一定的编程功底&#xff0c;此外强烈建议买书&#xff0c;因为很多架构图、算子列表&#xff0c;我也不会摘抄下来。第一章 简介1.Spark执行的特点Hadoop中包含计算框架MapReduce和分布式文件系统HDFS等。Spark是MapReduce的替代…

晶振波形不是正弦波_晶振的分类及其应用

晶振分类虽然多种多样(可以在电子元器件采购平台亿配芯城上查看分类)&#xff0c;但是晶振的作用无非是以下2种&#xff1a;1.为系统提供基本的时钟信号。一个系统共用一个晶振&#xff0c;便于各部分保持同步&#xff08;有些通讯系统的基频和射频虽然使用不同的晶振&#xff…

第三代航空轴承钢产品 css-42l,航空轴承钢的发展及热处理技术(一)

航空轴承钢的发展及热处理技术(一)随着航空航天技术的发展&#xff0c;轴承钢的种类和承溫能力逐渐提高。我国航空航天轴承的热处理技术一直处于发展阶段&#xff0c;但与国外轴承钢的热处理技术相比仍有一定的上升空间。总结国内外航空航天轴承钢及热处理技术的发展&#xff0…

画米老鼠_蔡康永都在买的画你也买得起,村上隆作品收藏大全

疫情爆发已经一个多月了&#xff0c;大家的情绪犹如坐过山车跌宕起伏&#xff0c;从彷徨焦虑迷茫到惊恐绝望&#xff0c;再到现在的翘首以望。在疫情爆发之际&#xff0c;钟南山院士说了一句话特别鼓舞我&#xff0c;他呼吁宅家隔离&#xff0c;待春暖花开之时&#xff0c;我们…

本地服务器的音乐如何才能播放视频文件夹,mx播放器如何添加本地文件 添加本地文件设置方法...

更换播放器皮肤/主题颜色在这个版本中 主题颜色的设置十分丰富 不再拘泥于原来的黑白二色点击“设置”选择“列表”项 修改主题&#xff0c;选择一种自己喜欢的颜色 现在有十五种颜色可以选择用mxplayer播放音乐虽然它的功能包含了播放本地音频 但是实际使用的过程中我们可以发…

hbase本地调试环境搭建

1&#xff0c;前言 想要深入的了解hbase&#xff0c;看hbase源码是必须的。以下描述了搭建hbase本地调试环境的经历 2&#xff0c;安装步骤 2.1&#xff0c;启动hbase 1&#xff0c;安装java和IDE IntelliJ&#xff0c;下载源码等。步骤这里不再描述。 2&#xff0c;从HMaster以…

微信墙服务器地址,一面微信墙的诞生(3) 用户端界面的创建

在用户发表留言之前&#xff0c;需要进入登录状态。在微信平台中&#xff0c;登录应该是一个自动的过程&#xff1a;用户只需要进行一次授权&#xff0c;往后的登录都由后台自己来处理。在 client 文件夹下新建 index.php &#xff1a;登录流程首先要处理自动登录这一流程&…

pg数据库json数据类型_PostgreSQL与开发者起舞—让数据库更好服务于开发

写在前面的话&#xff1a;本文内容有对应50分钟视频讲解&#xff0c;有兴趣可以访问PG与开发者共舞。很多数据库的对比的活动都是基于数据库本身的一些的底层的功能以及纯数据库方面的对比&#xff0c;等等。更多方面数据库是要为应用来服务的&#xff0c;而生产应用的大部分都…

系统启动 之 Linux系统启动概述(2)

博客&#xff1a;http://blog.csdn.net/younger_china/article/details/51615916 Linu系统启动是一个”冗长乏味”的过程,那么我们现就需要去经历一下这个冗长乏味的生活。我们按照如下流程来分析&#xff1a; 1. 史前时代&#xff1a;BIOS 计算机在上电那一刻几乎是毫无用处的…

python 全文搜索 句子_python新玩法:用python进行文章摘要拿取,只需要一行代码

前言今天为大家介绍一个python算法TextRank,实现从长篇中快速抽取精准摘要。TextRank是一种基于图形的文本处理排序算法。PageRank通常用作其底层的图排序模型。当然&#xff0c;其他的图排序模型也可以与之结合。TextRank算法不需要深入的语言和专业知识&#xff0c;因为它是一…

Django小项目简单BBS论坛

开发一个简单的BBS论坛项目需求&#xff1a;1 整体参考“抽屉新热榜” &#xff0b; “虎嗅网” 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数、点赞数展示 5 在线用户展示 6 允许登录用户发贴、评论、点赞 7 允许上传文件 8 帖子可被置顶 9 可进行多级评论知识必备&#x…

时间转年月日_编程中常见的时间格式

时间格式前端和后端时经常会遇到各种各样的时间格式&#xff0c;这些格式在编写程序的时候都需要去使用不同的处理方式&#xff0c;这里集中写一下。先说一下各种不同的时间格式。类型名格式说明ISO 8601一般&#xff1a;2020-12-05T05:33:19Z 东八区&#xff1a;2004-05-03T17…

外星人台式机无盘服务器,可以拎走的“台式机” Alienware Area-51m评测

Alienware外星人这个品牌曾经一度是游戏笔记本领域的执牛耳者&#xff0c;自从1996年创立以来&#xff0c;品牌宗旨就是提供最强的PC性能&#xff0c;最有个性的设计和最好的服务。凭借着强悍的配置、创新的黑科技和酷炫的灯效&#xff0c;其一度是业内高端和高品质的代名词。但…

法流程图_世界五大学习方法之西蒙学习法

世界五大学习方法之西蒙学习法摘要&#xff1a;西蒙学习法为6个月可以掌握任何一门学问&#xff0c;它的本质是广义动量定理。广义动量定理通过调整力量、方向、作用点和时间来增加成果。西蒙学习法使用了降低问题难度方法中的一种&#xff1a;拆分。本节分为四个部分&#xff…

生成word_Word如何生成目录?3个步骤轻松掌握!

在使用Word编写长篇文档时&#xff0c;我们经常会给内容生成一个目录&#xff0c;有了目录&#xff0c;无论是阅读还是查找内容&#xff0c;都非常方便。Word生成目录是一项核心功能&#xff0c;这是每个使用Word的人&#xff0c;必须要掌握的一项技巧。如果你还不会这项技巧&a…

启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明

内网穿透工具 FRP 公网服务端、内网客户端 frps.ini 、frpc.ini 配置文件常用设置展示及说明公网服务端 frps.ini 配置文件常用设置公网服务端配置文件&#xff1a;frps.ini[common]bind_port 7000# vhost_http_port 参数来设置 HTTP 访问端口&#xff0c;此处示例&#xff1a…

设置dns_2019让你的网速飞起来,你需要……设置正确DNS服务篇

有时候上网明明网络连接正常&#xff0c;但网页访问却很慢&#xff1f;平时会不会经常听到一些老司机说&#xff0c;网络很慢啊可以修改一下DNS啊&#xff01;什么是DNS&#xff1f;又为什么会对网速产生影响呢&#xff1f;跟着小编的教程一起来学习一下吧~PART 1 什么是DNS&am…

5 随窗口改变大小_C4D默认界面两个关于坐标轴的窗口有什么区别

前言在一开始学习C4D的时候&#xff0c;就有这个疑问&#xff0c;为什么明明物体的属性都有了一个坐标属性的窗口了&#xff0c;还要有一个和坐标相关的窗口在默认的界面呢&#xff0c;后边在使用的过程中才慢慢理解了额外的坐标管理器窗口的作用&#xff0c;这一篇文章我们来看…