65.Linux系统上库文件的生成与使用

目录

1.什么是库文件

2.静态库的生成与使用

2.1静态库的生成

2.2静态库的使用

3.共享库的生成和使用 

3.1共享库的生成

3.2共享库的使用 

 4、静态库和共享库的区别

1.什么是库文件

        库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib.在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在/usr/include 下或其子目录下。
        库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so,如下图所示:

2.静态库的生成与使用

2.1静态库的生成

        以下是需要生成静态库的”.c”文件,其中“foo.h”中是函数的声明,“add.c”和“max.c”是函数的定义:

第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件

 第二步:使用 ar 命令将第一步编译的所有”.o”文件生成静态库,其中:
◼ c 是创建库
◼ r 是将方法添加到库中
◼ v 显示过程

 

2.2静态库的使用

以下是测试代码”test.c”中的内容:

以下是使用静态库“libfoo.a”和“main.c”生成可执行文件的过程,其中:
◼ -L 指定库的存储路径
◼ -l 指定库的名称(不需要前面的‘lib’和扩展名‘.a’)  

3.共享库的生成和使用 

3.1共享库的生成

        以下是需要生成共享库的”.c”文件,其中“foo.h”中是函数的声明,“add.c”和“max.c”
是函数的定义:

第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件 

第二步:使用 gcc 命令将第一步编译的所有”.o”文件生成共享库 

 

3.2共享库的使用 

以下是测试代码”main.c”中的内容:

        以下是使用共享库“libfoo.so”和“main.c”生成可执行文件的过程,其中 -L 指定库的存储路径, -l 指定库的名称(不需要前面的‘lib’和扩展名‘.so’), 如果在库的存储路径有同名的共享库和静态库,gcc 默认使用共享库。 

        生成之后,直接执行 main 程序,发现出错,原因是系统加载共享库时,找不到对应的共享库文件”libfoo.so”, 但是该库确实在当前目录下存在。这是为什么呢?因为系统默认只会去存储库的标位置(/lib 或/usr/lib 等)加载,而不会在当前位置寻找。所以将库拷贝到/usr/lib 下,再执行程序,就可以成功。如果库不在标准位置下,也可以通过设置环境变量”LD_LIBRARY_PATH”来指定加
载库的路径。 

可以通过 ldd 命令查看可执行程序使用了哪些共享库:

 4、静态库和共享库的区别

        静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做
标记,在运行程序时,才动态加载。 

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

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

相关文章

2023国赛数学建模C题模型代码

C题代码全部都完成了,可以看文末名片 我们先看C题的一个背景 在生鲜商超中,蔬菜类商品保鲜期短,且品相会随销售时间增加而变差。商超需要根据历史销售和需求每天进行补货。由于蔬菜品种众多、产地不同,补货时间在凌晨,商家须在不明确具体单品和价格的情况下进行补…

N5235B是德科技网络分析仪50GHz

181/2461/8938对无源元器件和简单的有源器件执行基本分析 适用于对成本非常敏感的应用,可以在高达 50 GHz 的频率范围内精确测量 S 参数 具有出色的性价比,可用于微波器件制造测试 可以配置经济型解决方案,用于信号完整性测量和材料表征 …

MySQL事务日志--redo, undo详解

事务有 4 种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由 锁机制 实现。 而事务的原子性、一致性和持久性由事务的 redo 日志和 undo 日志来保证。 REDO LOG 称为 重做日志 &#xff0c…

cadence后仿真/寄生参数提取/解决pin口提取不全的问题

post-simulation设置顺序与规则 1.Rules 设置 2.inputs设置 3.outputs设置 4.PEX 设置 会出现错误1,后有解决方案 第一步 :Netlist 第二步:LVS 5.RUN PEX 先RUN,后按照图中1 2 3步骤操作 点击OK之后,显示Calibre信息&#xff…

敏捷开发、V模型开发、瀑布模型

在软件开发领域,敏捷开发和V模型开发是两种主要的开发方法。它们之间的差异主要体现在开发过程的结构和组织方式上。在以下讨论中,我们将深入探讨这两种方法的特点和差异。 敏捷开发 敏捷开发是一种迭代和增量的软件开发方法,它强调灵活性和…

Linux修复软RAID

系统应该将mdadm配置成当发生RAID问题时给root用户发送邮件。需要更改/etc/mdadm/mdadm.xonf里的MALLADDR 并用/etc/init.d/mdadm reload重新加载下 查看/proc/mdstat文件 可以看到sdd1被标记F,说明它已经失效 从/dev/md0中移除磁盘sdd1 想要移除磁盘&#xff…

基于javaweb的网上图书销售系统(servlet+jsp)

系统简介 本项目采用eclipse工具开发,jspservletjquery技术编写,数据库采用的是mysql,navicat开发工具。 角色: 管理员普通用户 模块简介 管理员: 登录用户管理图书分类管理图书管理图书订单管理图书评论管理数据统…

100天精通Golang(基础入门篇)——第20天:Golang 接口 深度解析☞从基础到高级

🌷🍁 博主猫头虎🐅🐾 带您进入 Golang 语言的新世界✨✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂&#x1f…

MySQL日志

MySQL日志 文章目录 MySQL日志1. 二进制日志(binary log)1.1 二进制日志的概念1.2 二进制日志的作用1.3 二进制日志相关参数及作用1.3.1 max_binlog_size1.3.2 binlog_cache_size1.3.3 sync_binlog1.3.4 binlog_format1.3.5 binlog_do_db1.3.6 binlog_ignore_db1.3.7 log-slave…

时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)

时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测) 目录 时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1…

阿里云App备案详细流程_APP备案问题解答

阿里云APP备案流程分为6步,APP备案成功后应用可以上架,登录阿里云账号填写APP信息,等待阿里云初审,初审通过后进行工信部短信核验,管局审核通过后APP即可备案成功,最后移动APP应用可以分发平台上架&#xf…

SpringCloud环境搭建及入门案例

技术选型: Maven 3.8.4SpringBoot 2.7.8SpringCloud 2021.0.4SpringCloudAlibaba 2022.0.1.0Nacos 2.1.1Sentinel 1.8.5 模块设计: 父工程:SpringCloudAlibaba订单微服:order-service库存微服:stock-service 1.创建…