首页 > 其他分享 >28_库的制作与使用

28_库的制作与使用

时间:2024-04-08 12:12:27浏览次数:26  
标签:文件 mylib lib void 28 编译 使用 动态 制作

库的制作与使用

介绍

​ 库是一种可执行的二进制文件, 是编译好的代码。 使用库可以提高开发效率。 在 Linux 下有静态库和动态库。 因此编译出来的体积就比较大。
​ 静态库在程序编译的时候会被链接到目标代码里面。 所以程序在运行的时候不再需要静态库了。 因此编译出来的体积就比较大。 以 lib 开头, 以.a 结尾
​ 动态库(动态库也叫共享库) 在程序编译的时候不会被链接到目标代码里面, 而是在程序运行的时候被载入的。 所以程序在运行的时候需要动态库了。 因此编译出来的体积就比较小。 以 lib 开头, 以.so 结尾。

静态库的制作步骤:

​ 1 编写或准备库的源代码
​ 2 将源码.c 文件编译生成.o 文件
​ 3 使用 ar 命令创建静态库
​ 4 测试库文件

实验: 静态库的制作

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

#include<stdio.h>
void mylib(void);
void mylib(void)
{
	printf("This is mylib\n");
}	

image-20240404185429613

cr是创建和覆盖的意思

lib开头.a结尾

libmylib.a: 库文件名

mylib: 库名

使用这个静态库

test.c

#include<stdio.h>

void mylib();

int main(int argc, char const *argv[])
{
    mylib();
    return 0;
}

image-20240404224758176

-l+去掉lib前缀和.a后缀的库名

-L+该库文件名所在的路径

动态库制作步骤:

​ 1 编写或准备库的源代码
​ 2 将源码.c 文件编译生成.o 文件
​ 3 使用 gcc 命令创建动态库
​ 4 测试库文件
新建 mylib.c 文件, 编辑内容如下所示:

#include<stdio.h>
void mylib(void);
void mylib(void)
{
	printf("This is mylib\n");
}

image-20240404225110035

-fpic: 生成位置无关的代码(产生的代码中,没有绝对地址,全部使用相对地址)

-shared: 生成动态库

test.c

#include <stdio.h>
void mylib(void);
int main(void)
{
	mylib();
	return 0;
}

image-20240404225149360

image-20240404225153648

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

解决方法:

第一种方法:
将生成的动态库拷贝到/lib 或者/usr/lib 里面去, 因为系统会默认去这俩个路径下寻找。
第二种方法:
把我们的动态库所在的路径加到环境变量里面去, 比如我们动态库所在的路径为/home/test, 我们就可以这样添加, 但是这种方法只在当前设置的窗口有效。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/samba/linux/13

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

image-20240404230152099

只对当前命令窗口有效

第三种方法:
修改 ubuntu 下的配置文件/etc/ld.so.conf, 我们在这个配置文件里面加入动态库所在的位置, 然后使用命令 ldconfig 更新目录。
我们输入以下命令编辑/etc/ld.so.conf 文件, 如下图所示:

image-20240404231512852

image-20240404231423291

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

image-20240404230313139

标签:文件,mylib,lib,void,28,编译,使用,动态,制作
From: https://www.cnblogs.com/mzx233/p/18120848

相关文章

  • Koa 应用中使用错误处理中间件
    示例:如果访问应用时URL中包含参数error=true,则会抛出一个错误。错误处理中间件会捕获这个错误,并返回适当的错误响应。constKoa=require('koa');constapp=newKoa();//错误处理中间件app.use(async(ctx,next)=>{try{//执行下一个中间件awaitnex......
  • 6款支持国产系统电脑使用的办公软件,满足信创用户办公需求
    随着信息技术的飞速发展,信创成为国家发展的重要战略方向。信创用户在办公过程中,对于软件的安全、稳定、易用性要求越来越高。今天给大家分享6款支持国产系统电脑使用的办公软件,这些软件不仅功能强大,而且能够满足信创用户的多样化办公需求。 01、永中Office 永中Office是一款......
  • 在Linux中,iptables和firewalld两种防火墙如何使用?
    在Linux中,iptables和firewalld是两种常用的防火墙工具,它们用于配置和管理系统的网络流量。它们都提供了对数据包的过滤、转发和网络地址转换(NAT)等功能。1.iptablesiptables是Linux内核的防火墙组件,它提供了一个命令行界面来设置数据包过滤规则。iptables使用表(tables)和链(chains......
  • Midjourney api 国内对接使用教程
    项目背景众所周知,Midjourney并没有提供任何的Api服务,但是基于Midjourney目前的行业龙头位置,很多企业以及个人会有相关的需求。TTApi平台基于Midjourney现有功能整理出一套完整的可集成性高的服务,如果你有类似的需求,那么恭喜你找到了正确的使用方式。新用户注册免费送100配......
  • 阿里云首个 AI 员工入职,围观开发工程师使用反馈
    大家这两天肯定知道新消息了,我们的新同事通义灵码已入职阿里云云原生团队,今天Serverless研发工程师西流搭档新同事通义灵码,从生成单元测试和自动生成代码2大能力展示Ta的强大实力。被问及编程时最困扰的问题时,西流表示:“很多人为了赶业务,就没有时间去补测试。写代码和测试......
  • 如何使用Git和GitHub - 初学者和有经验开发者的指南
    欢迎来到初学者的Git和GitHub!这份综合指南旨在帮助您探索版本控制和协作的世界。无论您是刚开始的新手还是经验丰富的开发者想要提升技能,这个指南都提供了逐步的方法来理解和有效使用Git和GitHub。通过本次旅程,您将建立起对Git和GitHub的坚实基础。您将具备实用知识,以简化您的编......
  • Manim教程之轻松制作数学动画
    【2024最新教程】Manim动画软件教程,像3blue1brown那样做动画【更新中】【2024最新教程】Manim动画软件教程,像3blue1brown那样做动画【更新中】_哔哩哔哩_bilibiliManim教程之轻松制作数学动画Manim教程之轻松制作数学动画_哔哩哔哩_bilibili我找到了3Blue1Brown做视......
  • Elasticsearch,使用scroll实现遍历(分页)查询
    为什么要使用scroll查询在使用es中,当某个index存贮的数据超过10000时,只能查询到10000的数据。因为index.max_result_window默认值是10000。并且使用游标查询可以在一次查询中获取大量文档,并且保持查询快照状态,允许用户多次检索数据而不影响其他并发请求。scroll查......
  • 如何使用Java和RabbitMQ实现延迟队列(方式二)?
    前言昨天写了一篇关于Java和RabbitMQ使用插件实现延迟队列功能的文章,今天来讲下另外一种方式,不需要RabbitMQ的插件。前期准备,需要安装好docker、docker-compose的运行环境。需要安装RabbitMQ的可以看下面这篇文章。如何使用PHP和RabbitMQ实现消息队列?-CSDN博客使用RabbitM......
  • 如何使用Java和RabbitMQ实现延迟队列?
    前言今天我们使用Java和RabbitMQ实现消息队列的延迟功能。前期准备,需要安装好docker、docker-compose的运行环境。需要安装RabbitMQ的可以看下面这篇文章。如何使用PHP和RabbitMQ实现消息队列?-CSDN博客今天讲的是依赖RabbitMQ的延迟插件实现消息队列的延迟功能。如何安装......