linux 编译mqtt静态库_Linux动态库和静态库教程

news/2025/2/26 19:50:58

本教程以Ubuntu16.04系统为例,实验涉及的程序文件有:xyhcal.c,add.c,sub.c,mul.c,xyhcal.h,这五个文件的源代码如图1所示:

06dbb209b27fe9b0a4fdb4ee36552e8a.png

图1 源代码示意图

Linux动态库具体实现步骤如下:

1. 将add.c,sub.c,mul.c文件编译为.o文件(不链接),使用gcc -fPIC -c命令操作,具体实现如下:

实例:gcc -fPIC -c add.c -o add.o

gcc -fPIC -c sub.c -o sub.o

gcc -fPIC -c mul.c -o mul.o

实现过程如图2所示:

25b7677fc2b2234dabeb29eb5c0d2372.png

图2 命令实现

2. 将add.c,sub.c,mul.c文件生成的.o文件编译为动态库,具体命令实现如下:gcc -shared -Wl,-soname,libmycal.so.1 -o libmycal.so.1.1 add.o sub.o mul.o。

命令实现如图3所示:

1c9e68ef6f5dde7df55c3b2931387cbe.png

图3 命令实现过程

3. 添加动态库并编译xyhcal.c程序

命令实现:gcc xyhcal.c libxyhcal.so.1.1 -o xyhcal,如图4所示:

4dd2262ba84820287b9d6a079fd96c86.png

图4 命令实现

4. 用ldd查看xyhcal程序是否缺少动态库链接路径,命令实现如图5所示:

a17b6d38dd1b6c877692b6d62ecfb860.png

图5 命令实现

5. 添加动态库路径,用sudo vim /etc/ld.so.conf命令文件,添加/home/xyh/xyhcal目录。实现如图6,图7所示:

10e608093fe52ee381a4936c4391b950.png

图6 命令输入

cf86117c98126debbe5d5de48b3b2f80.png

图7 链接路径添加

6. 更新生效ld.so.conf文件,Shell终端输入命令sudo ldconfig -v,实现如图8所示:

fa5d74deeebcd48138aa5b6ebab551a8.png

图8 更新ld.so.conf文件

7. 运行程序./xyhcal,命令实现如图9所示:

36a122083c6ca2ffd80a88709a6cb6ff.png

图9 运行程序结果

Linux静态库具体实现步骤如下:

1. 将add.c,sub.c,mul.c文件编译为.o文件(不链接),使用gcc -fPIC -c命令操作,具体实现如下:

实例:gcc -fPIC -c add.c -o add.o

gcc -fPIC -c sub.c -o sub.o

gcc -fPIC -c mul.c -o mul.o

实现过程如图10所示:

f1e79c6e4b6dbdbcdbf9f421a02813ab.png

图10 命令实现

2. 将生成的.o文件编译为静态库

命令实现:ar src libxyhcal.a add.o sub.o mul.o,结果如图11所示:

ba6f395eba6fc933b529278ec4e1d66a.png

图11 命令实现

3. 编译xyhcal.c文件,如图12所示:

70399757db862dd0e8eec22163867d85.png

图12 命令实现

4. 运行程序xyhcal程序,结果如图13所示:

367c1b9a8bc4546e1451cadd2ac344b1.png

图13 命令实现


http://www.niftyadmin.cn/n/2087922.html

相关文章

android贪吃蛇项目代码_如何用C语言做贪吃蛇小游戏?

C语言作为计算机编程最初学的语言,作为高级语言的C语言,那么它又可以为我们实现什么功能呢?我认为有强大的基础技能和无限的脑洞,你就可以做出许多我们意想不到的程序出来,关键在于你是否敢想敢做?下面我就…

WASND6.1官方不支持SUSE 10.3,我手工让它自检通过支持项

编辑一个maintenance.xml文件&#xff0c;文件内容如下&#xff1a; − <install-package> − <nif-cache id"nifcache" impl"com.ibm.ws.install.ni.framework.plugin.NIFCachePlugin"> <param name"cacheid" value"primar…

mysql中查询没有选修某两门课的_关于MySQL的经典例题50道

--1.学生表Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(C,Cname,T) --C --课程编号,Cname 课程名称,T 教师编号--3.教师表Teacher(T,Tname) --T 教师编号,Tname 教师姓名--4.成绩表SC(S,C,score) --S 学生编号,C 课程…

1.7.10:简单密码

10:简单密码 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符&#xff0c;将它用它字母表中后5位对应的字符来代替&#xff0c;这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关…

Eclipse安装和使用TFS

第一步下载Tfs插件 去微软官网下载https://www.microsoft.com/en-us/download/details.aspx?id4240 点击 选择下载 随便放置到一个本地或者服务器目录(不带中文) 第二步建立站点 下载完毕之后&#xff0c;打开Eclipse。 点击Help菜单中的Install New Software选项。 点击添加…

suse10下安装mq6.0无法创建队列管理器

suse10下安装mq6.0的几个注意事项&#xff1a; 1、默认mqlicense.sh文件在suse下没有exe权限&#xff0c;需要赋权&#xff0c;redhat下没有问题。 2、同样的./lap/ibmjdk1.4.2/jre/bin/java程序也需要赋权。 3、groupadd后的useradd的mqm用户默认在suse下被禁止登录&#x…

BOM的对象总结(location,screen,navigator,history)

location对象 专门保存当前窗口正在打开的url的对象。 常用的属性有: location.href 保存了完整的url&#xff1b;这种方式做常用 在当前窗口打开: location.href新url location.protocol: 协议 .host: 主机名端口号 .hostname: 主机名 .port: 端口号 location.pathname: 相对路…

被人轻视——用行动,而不是用嘴巴证明自己

1.被人羞辱——翻脸不如翻身&#xff0c;生气不如争气2.面对反对意见——听&#xff0c;并且思考3.犯错——年少轻狂未足奇&#xff0c;知错能改真俊杰4.烦恼之事——心事不能随便说5.谣言——不能置之不理&#xff0c;也不能纠缠下去6.别人的脸色——不必太在意&#xff0c;做…