库的制作与使用

news2024/12/26 3:05:35

什么是库

库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在 Linux 下有静态库和动 态库。因此编译出来的体积就比较大。

静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此 编译出来的体积就比较大。以 lib 开头,以.a 结尾

动态库(动态库也叫共享库)在程序编译的时候不会被链接到目标代码里面,而是在程序运行的时候 被载入的。所以程序在运行的时候需要动态库了。因此编译出来的体积就比较小。以 lib

静态库的制作步骤:

1 编写或准备库的源代码

2 将源码.c 文件编译生成.o 文件

3 使用 ar 命令创建静态库

(ar rc 静态库名  编译生成的.o文件)(rc  r:覆盖的意思  c:创建的意思)

4 测试库文件

libmylib.a:   库文件名

mylib:    库名

实验:静态库的制作:

新建 mylib.c 文件,编辑内容如下所示

 我们在 Ubuntu下编译,如下图所示:

 编写测试代码 test.c,编辑内容如下所示:

 编译测试文件 test.c,如下图所示

 运行测试 a.out,如下图所示

动态库制作步骤:

1 编写或准备库的源代码

2 将源码.c 文件编译生成.o 文件

3 使用 gcc 命令创建动态库

4 测试库文件

举例:gcc test.c -lmylib -L

-l:指定动态库的库名 -L:指定动态库的查找位置-L .  表示在当前目录下去查

 实验:动态库的制作:

新建 mylib.c 文件,编辑内容如下所示:

 我们在 Ubuntu下编译,如下图所示:

 编写测试代码 test.c,编辑内容如下所:

 编译测试文件 test.c,如下图所示:

 运行测试 a.out,如下图所示:

 在动态库使用是,系统会默认去/lib,/usr/lib 目录下去查找动态函数库,如果我们使用的库不在里面, 就会提示错误。解决这个问题有三种方法

第一种方法:

将生成的动态库拷贝到/lib 或者/usr/lib 里面去,因为系统会默认去这俩个路径下寻找。

 第二种方法

把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可 以这样添加,但是这种方法只在当前设置的窗口有效。

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hsj/file_bc/make_lib

我们加入环境后,运行 a.out,如下图所示:

 第三种方法:

修改 ubuntu 下的配置文件/etc/ld.so.conf,我们在这个配置文件里面加入动态库所在的位置,然后使用 命令 ldconfig 更新目录。

我们输入以下命令编辑/etc/ld.so.conf 文件,如下图所示:

文件内容为:

  

修改完文件保存退出,输入ldconfig 更新目录。运行测试如下图所示:

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

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

相关文章

轻松学习白嫖GPT-4,已经标星38K,不再害怕高昂的AI模型费用!

文章目录 白嫖方式GPT-4当前可用站点 白嫖方式GPT-4 计算机专业学生xtekky在GitHub上发布了一个名为gpt4free的开源项目,该项目允许您免费使用GPT4和GPT3.5模型。这个项目目前已经获得了380000颗星。 开源地址:https://github.com/xtekky/gpt4free 简而…

vue ts写法

Vue.js 和 TypeScript 结合使用可以让你的项目更加健壮和易于维护。在 Vue 3 中,你可以使用 Vue.js 的 Composition API 和 TypeScript 一起使用。以下是一个简单的 Vue.js 和 TypeScript 结合使用的例子: 首先,确保你已经安装了 Vue.js 和 T…

如何从电机控制转换为运动控制

随着越来越多的技术广泛应用于工业自动化,我们已经进入了工业4.0时代。新技术不断涌现,赋能人工智能和机器学习、数据分析、工业网络、网络安全和功能安全。然而,大多数工业自动化作为其他所有技术的核心,仍然依靠机器人和运动控制…

【PWN · ret2text | PIE 】[NISACTF 2022]ezpie

简单的PIE绕过 目录 前言 一、题目重述 二、解题思路 1.现有信息 2.思考过程 3.exp 总结 前言 所接触的PIE保护的第一题,也非常简单。 一、题目重述 二、解题思路 1.现有信息 PIE保护——程序可能被加载到任意位置,所以位置是可变的。程序返回…

聚观早报 | 英伟达推「AI」超算;中国2030年前载人登月

今日要闻:英伟达推「AI」超算;中国2030年前载人登月;AI大热,游戏股全线大涨;ofo创始人二次创业项目陷入困境;微信视频号原创标记已对外显示 英伟达推「AI」超算 5 月 29 日,NVIDIA 宣布推出一款…

安捷伦E4440A 26.5G频谱分析仪Agilent e4440a 销售/回收

Agilent E4440A HP E4440A频谱分析仪,3 Hz - 26.5 GHz(PSA 系列) Agilent / Keysight PSA 系列 E4440A 高性能频谱分析仪提供强大的一键式测量、多功能功能集和前沿技术,可满足您的项目和需求。选项可供您选择(详情请…

maven 项目中引入第三方jar,并且打包到项目的运行jar包中

背景说明 项目中遇到了人大金仓数据库的jar连接驱动&#xff0c;需要在maven中引入依赖信息 实践 方案1&#xff1a; 1.在官网下载jar包&#xff0c;https://www.kingbase.com.cn/zxwd/index.htm 下载地址。在项目文件中创建libs目录。 修改pom文件的配置信息 <depende…

如何在 Windows 中检查打开的TCP/IP端口

每当应用程序想要通过网络访问自己时,它都会声明一个TCP/IP端口,这意味着该端口不能被其他任何东西使用。那么,如何检查打开的端口以查看哪个应用程序已经在使用它呢? 检查打开的TCP/IP端口 查看端口使用和进程名称查看端口使用和进程标识符查看端口使用和进程名称 首先,你…

【完全揭秘】Traefik云原生网关——助力你的业务破万QPS

Traefik 是一款开源的反向代理和负载均衡软件&#xff0c;可以自动地为多个微服务实例进行负载均衡&#xff0c;并提供 HTTP/HTTPS/TCP/UDP 等协议支持。 Traefik 具有简单易用、自动发现服务、动态配置、可插拔的中间件等特点&#xff0c;被广泛应用于云原生和容器化场景中&am…

【随时更新】面试所需算法数据结构计算机知识点回顾

操作系统LRU算法 MySQL B树 哈夫曼编码和解码 C 哈夫曼编码 【介绍编码过程】 哈夫曼树编码及其图形化的实现 【使用可视化方式展现最终编码效果】 Python中使用哈夫曼算法实现文件的压缩与解压缩 【Python实现】 哈夫曼树 C语言实现 【图解如何生成】 编码过程 1. 使用二进…

基于SpringBoot+Vue的素材管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着数字化时代的到来…

MySQL — 日志、错误日志、二进制日志、查询日志、慢查询日志

文章目录 日志一、错误日志二、二进制日志2.1 介绍2.2 格式2.3 查看二进制日志2.3.1 基于行的二进制日志格式2.3.2 基于语句的二进制日志格式 2.4 日志删除 三、 查询日志四、慢查询日志 日志 一、错误日志 ​ 错误日志是MySQL中最重要的日志之一。 ​ 记录了当MySQLd启动和…

为什么Facebook的转化率要远远低于论坛?

在数字化时代&#xff0c;社交媒体平台如Facebook和论坛都是企业推广和营销的重要渠道。然而&#xff0c;相对于论坛而言&#xff0c;Facebook的转化率明显较低。以下是一些解释&#xff1a; 1.用户意图和参与度的差异 论坛用户更具明确的意图和高度参与度。他们加入论坛是为了…

智能家居家电上应用的触摸芯片有哪些?

电容式触摸芯片&#xff0c;具有灵敏度高、抗干扰能力强&#xff0c;防水防尘、高可靠性等优点已逐步替代传统机械式按钮&#xff0c;广泛应用于家电、智能家居、消费电子、工控等领域。 触摸感应可以穿透绝缘材质检测人体手指带来的电荷移动&#xff0c;从而判断人体手指触摸…

从申请到调用:空号检测 API 使用教程

引言 在当今数字化的时代&#xff0c;手机号码成为了我们日常生活和商业活动中重要的联系方式之一。然而&#xff0c;随着电话号码的泛滥和变动性&#xff0c;验证手机号码的有效性变得越来越重要。 本文将深入探讨空号检测API 的背景和应用场景&#xff0c;介绍如何使用该 A…

STM32 Linux开发板丨STM32MP157开发板资料手册+实战教程+视频教程

iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持&#xff0c;借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。 开发板既有A7核&#xff…

ROS:VScode开发话题(msg)、服务(srv)、动作(action),解决 无法打开源文件

一.解决 无法打开源文件 出错原因&#xff1a;系统没有找到.h文件对应的路径。 在编写完msg、srv、action文件后&#xff0c;要进行编译&#xff08;catkin_make&#xff09; . 编译之后&#xff0c;msg、srv、action会生成相应的.h文件。 其对应的.h文件目录在devel/includ…

一款可发布236T全球影像,构建“离线版地球”的GIS产品

概述 《水经注地图服务&#xff08;WeServer&#xff09;》是一款可快速发布全国乃至全球海量卫星影像的地图发布服务产品&#xff0c;该产品完全遵循OGC相关协议标准&#xff0c;是一个基于若干项目成功经验总结的产品。它可以轻松发布100TB级海量卫星影像&#xff0c;从而使…

Poco 观察者模式(Observer Pattern) 订阅和发布某个感兴趣的通知, Observer和Notification

Poco 观察者模式&#xff08;Observer Pattern&#xff09; 订阅和发布某个感兴趣的通知&#xff0c; Observer和Notification flyfish 先写一个实例代码 #include "Poco/NotificationCenter.h" #include "Poco/Notification.h" #include "Poco/Ob…

Jetpack Hilt 框架的基本使用

什么是 Hilt&#xff1f; Hilt 是一个功能强大、用法简单的依赖注入框架&#xff0c;于 2020 年加入到 Jetpack 家族中。它是 Android 团队联系了 Dagger2 团队&#xff0c;一起开发出来的一个专门面向 Android 的依赖注入框架。相比于 Dagger2&#xff0c;Hilt 最明显的特征就…