Linux学习实验-----库文件的创建与时使用 实验一

Linux 系统上的库文件生成与使用 1.什么是库文件 库是一组实现编译好的方法的集合。Linux系统存储的库一般在:/lib或 /usr/lib。在64位的系统上有些库还可能在/usr/lib64下。而库的头文件一般会存储在/usr/include下或者子目录下。 库有两种,一种是静态库,其命令规则为libxxx.a,一种是共享库,命令规则为libxxx.so。 如下图所示: 2.静态库的生成与使用 2.1 静态库的生成 以下是需要生成静态库的”.c”文件,其中“foo.h”中是函数的声明,“add.c”和“max.c” 函数的定义: 第 阅读详情

一 实验题目:

库文件的创建与时使用实验

二 实验目的

掌握库文件工作的原理,库文件的创建和使用方法

三 实验内容

1、概述

2、编写最简单的静态库文件

3、制作库文件

4、使用库文件

5、动态库的编写

6、编译生成动态库 ,库文件名以lib开头,以.so 结尾。

7、动态库的隐式调用

四 实验步骤

1、概述

静态库文件的扩展名一般为.a,其编写步骤很简单。

⑴ 编写函数代码

⑵ 编译生成各目标文件

⑶ 用ar文件对目标文件归档,生成静态库文件。

  注意归档文件名必须以lib打头。

使用要点:

⑴ 在gcc 的-I参数后加上静态库头文件的路径。

⑵ 在gcc 的-L参数后加上库文件所在目录

⑶ 在gcc 的-l参数后加上库文件名,但是要去掉lib和.a扩展名。

  比如库文件名是libtest.a 那么参数就是 -l test

2、编写最简单的静态库文件

编写如下两个文件,注意放在同一目录中
myalib.h //静态库头文件
myalib.c //静态库实现文件
//myalib.h 文件的内容
void test();
//myalib.c 文件的内容
#inlcude <stdio.h>
void test()
{
printf(“test\n”);
}

3、制作库文件

⑴生成目标文件

执行完后会生成一个myalib.o文件

⑵用ar命令归档,格式为ar -rc <生成的档案文件名> <.o文件名列表

再次提醒,归档文件名一定要以lib打头 .a结尾。
执行完后会生成一个libtest.a文件

4、使用库文件

⑴编写一个测试程序main.c,内容为

//main.c 测试静态库调用的程序
#include “myalib.h” //要把函数的头文件包含进来,否则编译时会报错
int main(int argc,char* argv[])
{
test();
return 0;
}

⑵编译目标文件,注意要把静态库头文件的路径加到-I参数里面

现在生成了一个main.o文件
生成可执行文件,注意要把静态库文件的路径加到-L参数里面,把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。
Gcc -o main main.c libtestlib.a
此时就会生成一个名为main的可执行文件,另外,注意- l参数好象应该加到输入文件名的后面,否则会报错。
比如gcc -o main -L/root/exercise -ltest main.o就会提示
main.o(.text+0x11): In function main': : undefined reference to test’
collect2: ld returned 1 exit status

⑷执行可执行文件查看效果

4、动态库的编写

为了便于对照, 我们仍然采用静态库中的文件做例子.
编写如下两个文件,注意放在同一目录中
myalib.h //静态库头文件
myalib.c //静态库实现文件
//myalib.h 文件的内容
void test();
//myalib.c 文件的内容
#inlcude <stdio.h>
void test()
{
printf(“test\n”);
}

5、编译生成动态库 ,库文件名以lib开头,以.so 结尾。

此时就生成一个libtest.so文件

6、动态库的隐式调用

隐式调用的含义是代码里不出现库文件名,就是说这个代码和调用静态库的代码是类似的。

(1) 编写测试文件

//main.c 测试动态库隐式调用的程序
#include “myalib.h” //要把函数的头文件包含进来,否则编译时会报错
int main(int argc,char* argv[])
{
test();
return 0;
}

(2) 编译测试程序,与静态库类似,要把头文件的路径加到-I参数里面

现在生成了一个main.o文件

(3) 连接生成测试程序

现在生成了一个main文件

(4) 执行测试程序

此时出现提示
./main: error while loading shared libraries: libtest.so: cannot open shared object file: No uch file or directory。
这个原因就是程序运行时并不知道动态库所在的路径,因此自然找不到。
查阅资料并尝试解决这个问题的办法。

五 实验结果

2.在这里插入图片描述
3
在这里插入图片描述
在这里插入图片描述
4.
在这里插入图片描述
在这里插入图片描述
5.
在这里插入图片描述

六、总结

想要用好gcc编译命令,就要知道gcc命令的一些常用参数、gcc的参数解析机制、gcc库连接目录以及动态库和静态库的问题,了解各条语句的作用才能更好的讲gcc语句理解。

上面都为作者实际操作中的屏幕截图,有疑问可以讨论_

linux创建和使用动态链接库.so文件 立即下载

相关推荐

miniUSB PCB封装

miniUSB的PCB封装,对于初学者有一定帮助,可以直接使用,或者作为参考。

linux静态库——实验1

实验目标: 是在libc.a静态库中添加自己写的函数,并写测试程序进行调用添加的函数。 实验步骤: 1. 制作目标文件     (1)编写目标文件的源文件(obj_add.c),代码如下:   1 #include   2   3 void test(v

fxmmc的专栏 862

告别过热焦虑:用Ansys Icepak给你的电子设备做个“水冷体检”(附冷板案例全流程)

本文详细介绍了如何利用Ansys Icepak进行电子设备水冷系统的热仿真分析,帮助工程师解决设备过热问题。通过冷板案例全流程演示,展示了从几何处理、材料设定到求解器设置和后处理的关键步骤,提升散热设计效率与准确性。

weixin_29299807的博客 439

数据库实验1 数据库定义与操作语言实验

理解和掌握数据库DDL语言,能够熟练使用SQL DDL 语句创建、修改和删除数据库、模式和基本表。可以先定义零件供应商子模式,包括Part、Suppler和 PartSupp三个基本表,类似学生、课程和选课数据库模式。可以先不定义实体完整性和参照完整性,待讲完有关概念后再在实验3中练习。正确理解数据库模式结构,才能正确设计数据库查询;连接查询是数据库SQL查询中最重要的查询,连接查询的设计要特别注意,不同的查询表达,其查询执行的性能会有很大差别。

jzb的博客 1万+

Deeplabcut实战:从数据标注到行为分析的全流程解析

本文详细解析了Deeplabcut从数据标注到行为分析的全流程实战技巧,包括项目创建、配置文件定制、智能帧提取、高效标注方法、模型训练优化以及多视角融合等高级应用。通过具体案例和实用参数配置,帮助研究者快速掌握这一行为分析工具,提升实验效率和准确性。

weixin_29057163的博客 245

交流异步机VVVF变频控制simulink/matlab仿真分析

VVVF,是Variable Voltage and Variable Frequency的缩写, 意为:可变电压、可变频率,也就是变频调速系统。 VVVF控制的逆变器连接电机,通过同时改变频率和电压,达到磁通恒定(可以用反电势/频率近似表征)和控制电机转速(和频率成正比)的目的,所以多应用在变频器中,属于工业自动化领域。

Ezekiel_Mok的博客 4207

weblogic缓存清理

缓存文件就是指JSP文件编译后的class和java文件。虚拟机无法直接执行JSP文件,首先需要把.jsp编译为.java,然后再编译为.class。 这个过程是应用服务器自动完成的,不需要人工干预。tomcat用于存放这些文件的地方就是work目录。有时你修改了jsp文件但页面没有任何变化, 有可能是jsp文件虽然更改但tomcat没有及时编译。这是只需要清掉work目录中的相应内容,tom

leo 2561

基于FPGA的时间数字转换(TDC)设计(一:原理)

基于FPGA的时间数字转换(TDC)设计,此为第一篇

sdau2005的博客 5069

库文件的使用

库是一组预先编译好的方法的集合。

xlxwdyjl的博客 478

华为OD机试 新系统真题 【数字系统转换器】

华为OD机试 新系统真题【数字系统转换器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【数字系统转换器】多语言题解。

qq_45776114的博客 538

基于深度学习的停车位检测系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

传统的停车位检测方法主要依赖于人工或基于简单图像处理的技术,存在检测速度慢、准确率低、环境适应性差等问题。近年来,随着深度学习技术的快速发展,基于目标检测的停车位检测系统已成为研究的热点。本文基于YOLO(You Only Look Once)系列模型(包括YOLOv5、YOLOv6、YOLOv7和YOLOv8),开发了一个完整的停车位检测系统,支持实时检测、结果可视化以及UI交互界面。本文实现了一个基于深度学习的停车位检测系统,采用YOLO模型在实时视频流中进行高效检测。

YOLO 332

静态库(lib)和动态库(dll)的使用

静态库(lib)和动态库(dll)的理解与使用前言一、函数重载的理解二、extern “C” 的理解三、静态库的调用1.静态库的生成2.静态库的调用四、动态库的调用1.动态库的生成2.动态库的调用 前言 说明   静态库和动态库在windows软件开发当中很常用,好的软件架构很多功能都是以库的形式存在,假如该功能需要升级,则直接替换该库文件就行,不需要把整个程序进行升级。这样维护起来就比较方便。   常见的库文件有.lib和.dll两种形式,分别是静态库和动态库。   静态库在形成exe文..

张一西的博客 8328

YOLO26魔改:ICIP2026 SDTA|单深度转置注意力注入C2PSA,长程依赖与局部细节双增强,mAP提升显著

多尺度适配:SDTA的深度卷积与C2PSA的空间注意力结合,增强对多尺度目标的结构感知,改善遮挡与密集场景下的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 292

Linux库文件使用与编译

介绍在Linux下使用静态库、共享库、动态库的方法。 Linux库文件 静态库 在Linux中,以.a为后缀,如libtest.a 直接拷贝函数到二进制映像文件 只需要运行二进制文件,可以直接运行 共享库 在Linux操作系统中,以libxxx.so.x.x为格式命名 可执行文件在开始运行时将函数从共享库文件中读出,从而间接引用 好处是,当函数接口没变,实现改变时,不需要再次编译 ...

crazy_scott的博客 7712

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Linux下库文件学习(三)如何创建和使用库文件

最近在Linux下使用第三方库Protobuf时,遇到一个问题:编译出的可执行程序在运行时总报错:“error while loading shared libraries: libprotobuf.so.7: cannot open shared object file: No such file or directory”。于是花时间弄清楚原因,找到解决方案,跟大家共享一下。

yasaken 2581

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux基础(七):Linux 系统上的库文件生成与使用

库是一组预先编译好的方法/函数的集合。在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库有两种,一种是静态库,其命令规则为libxxx.a,一种是共享库,其命令规则为libxxx.so。Linux系统存储库的头文件(函数的声明)一般会被存储在下Linux系统存储的库(函数的具体实现)/lib 和 /usr/libLinux系统存储的二进制可执行程序/bin和/usr/bin第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件。

weixin_47040031的博客 2380

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux的库文件

文章参考链接:https://www.cnblogs.com/tankblog/p/6780146.html 一、什么是库文件? 本质上来说,库文件就是可执行代码的二进制形式,可以被操作系统载入内存中执行 Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库 Linux系统有几个重要的目录存放相应的函数库,如/lib、/usr/lib 二、静态库和动...

Wanggj的博客 3753

Linux 库文件

库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量、函数或类。库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库系统只需载入一次,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存,而且使用动态库也便于模块化更新程序。

2401_84378523的博客 892

【Linux基础】库文件

库文件是在编程过程中提供共享功能和资源的可重用代码集合,包括静态库和动态库两种类型,可通过链接器与可执行文件进行链接,提供代码重用、减小可执行文件大小、简化代码维护的优点,而动态库可以在运行时动态加载和卸载,使程序更加灵活可扩展。

qq_64928278的博客 2090

Linux 库文件详解

库文件是预先编译好的方法的集合,它为程序员提供了一种方便的方式来复用代码。在 Linux 系统中,主要有两种类型的库文件:静态库和共享库。

w20010915的博客 969

linux环境下的头文件与库文件

1.头文件 在写程序时,我们需要用头文件来提供对常量的定义和对系统函数及库函数调用的声明,这些头文件位于**/usr/include中。这些头文件都位于可以被编译器自动搜索到的目录中,如X视窗系统的/usr/include/X11和GNU C++的/usr/include /c++** ...

asd1147170607的博客 2387

【Linux】——库文件

一、库文件的定义 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib和 /user/lib。在64位的系统上有些库也可能被存储在/user/lib64 。库的头文件一般会存储在/user/include下或其子目录下。比如说libc libstdc++,库是一些特定功能的实现,为用户提供一些调用接口。 库有两种,分别是静态库和动态库之分,下图为库分别在不同系统下的呈现方式...

qq_43412060的博客 678
上一篇: Linux下关于makefile命令操作练习题(5)
下一篇: 关于第一次使用keil5软件注释为什么变成了?(保姆级教程)
Execution_
博客等级 码龄5年 1605粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值