LIUNX系统编程:动态库的制作

目录

1.将add.c和sub.c编译形成.o文件

2.讲add.o和sub.o打包成库

3.Makefile

4.细节问题

5.解决办法

1.直接将自己的库拷贝到库中

2.更改动态库辅助查找的环境变量

3. 在lib64中建立一个软连接


1.将add.c和sub.c编译形成.o文件

gcc -c -fPIC add.c sub.c// fPIC生成位置无关码

2.讲add.o和sub.o打包成库

这里打包使用的不是ar命令,还是gcc命令

gcc -shared add.o sub.o -o libmymath.so

这样动态库就制作完了,还是需要对这个库进行一些包装,让库更规范一下。

3.Makefile

libmymath.so:add.o sub.ogcc -shared -o $@ $^
%.o:%.cgcc -c -fPIC $< //$<:把依赖文件一个一个拿过来执行,有几个依赖文件执行几次.PHONY:cleanclean:rm -rf add.o sub.o libmymath.so mylib mylib.tgz
.PHONY:outputoutput://发布一个库mkdir -p mylib/include                                                                                            mkdir -p mylib/libcp ./*.h ./mylib/includecp ./*.so ./mylib/libtar czf mylib.tgz mylib

这是Makefile整理完的库

4.细节问题

我们将库打包好后,重新编译编译main

因为#include""的搜索规则是,在当前目录下寻找,找不到再去/usr/include中寻找头文件,但是我们的头文件在/mylib/inclue中,所以在编译的时候要指明我们的路径。

gcc -o main main.c -I ./mylib/include -L ./mylib/lib -lmymath

虽然编译好了但是运行main会报错

这个时候因为因为只在main编译的时候我们告诉编译器,这个库的位置,才得以编译通过。

但是我们并没有告诉操作系统,这个库的位置,所以在运行的时候,操作系统找不到这个共享库的位置。

使用ldd查看

的确是找不到mymath这个库。

5.解决办法

1.直接将自己的库拷贝到库中

把libmymath.so拷贝到/lib64目录下

把add.h sub.h拷贝到/usr/include目录下

这种方式只建议比较成熟的库我们可以这么做,自己写的就不要瞎搞了。

2.更改动态库辅助查找的环境变量

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:./mylib/lib

3. 在lib64中建立一个软连接

ln -s /home/wys/code/mylib/libsoft/mylib/lib/libmymath.so /lib64/libmymath.so

 

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

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

相关文章

揭秘APP广告:自刷收益真的可能吗?

在数字时代的浪潮中&#xff0c;应用程序&#xff08;App&#xff09;已成为我们生活的一部分。从早晨的闹钟应用到夜晚的助眠软件&#xff0c;我们的手机屏幕上挤满了各式各样的App。但是&#xff0c;你有没有想过&#xff0c;这些看似简单的App背后隐藏着怎样的商业模式&…

Docker——数据管理和网络通信

目录 一、Docker的数据管理 1.数据卷 2.数据卷容器 3.容器互联 二、Docker镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile 创建 3.1联合文件系统&#xff08;UnionFS&#xff09; 3.2镜像加载原理 3.3为什么Docker里的Centos大小才200M 4.Dcok…

Redis系列5:深入分析Cluster 集群模式

1 背景 前面我们学习了Redis高可用的两种架构模式&#xff1a;主从模式、哨兵模式。 解决了我们在Redis实例发生故障时&#xff0c;具备主从自动切换、故障转移的能力&#xff0c;终保证服务的高可用。 但是这些其实远远不够&#xff0c;随着我们业务规模的不断扩展&#xff0…

Docker深入探索:网络与资源控制、数据管理与容器互联以及镜像生成

目录 一、 Docker网络 &#xff08;一&#xff09;Docker网络实现原理 &#xff08;二&#xff09;Docker网络模式 1. Bridge网络&#xff08;默认&#xff09; 2. Host网络 3. None网络 4. Container网络 5. 自定义网络 二、资源控制 &#xff08;一&#xff09;cgr…

基于FreeRTOS的ESP32环境监测系统:利用Arduino框架实现SD卡数据记录与FTP服务器集成(一)

本文档深入剖析一段C代码&#xff0c;该代码运用FreeRTOS实时操作系统结合Arduino框架&#xff0c;构建了一个高效稳定的ESP32环境监测系统。系统不仅实时采集温度和湿度数据&#xff0c;还将这些数据记录到SD卡中&#xff0c;并通过FTP服务器实现远程访问。以下对代码中体现的…

html表格导出为word文档,导出的部分表格内无法填写文字

导出技术实现&#xff1a;fileSaver.jshtml-docx-js 1.npm安装 npm install --save html-docx-js npm install --save file-saver 2.页面引入 import htmlDocx from html-docx-js/dist/html-docx; import saveAs from file-saver;components: {htmlDocx,saverFile, }, 3.页…

21.Nacos集群搭建

模拟Nacos三个节点&#xff0c;同一个ip,启动三个不同的端口&#xff1a; 节点 nacos1, 端口&#xff1a;8845 节点 nacos2, 端口&#xff1a;8846 节点 nacos3, 端口&#xff1a;8847 1.搭建数据库&#xff0c;初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…

Prometheus数据模型与查询语言:构建高效监控系统的关键

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Prometheus诞生史 二、Prometheus的数据模型与查询语…

李昌林景观瓷砖外观设计专利申请成功

2024年4月16日据国家知识产权局官网公布:设计师李昌林的外观设计专利【景观瓷砖】授权&#xff0c;专利申请成功。 李昌林/景观瓷砖&#xff08;立体图1&#xff09; 《景观瓷砖》的设计者李昌林2003年5月19日出生于黑龙江省哈尔滨市&#xff0c;现就读于延边大学环境设计专业。…

OpenMesh 网格平均曲率计算(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

SpringCloud Hystrix 实战

一、配置 1.引入jar包 单独使用hystrix &#xff0c;不配合openFegin使用的话&#xff0c;单独使用hystrix,需要引入spring-cloud-starter-netflix-hystrix包。要使用的hystrix-dashboard 界面的话需要引入spring-boot-starter-actuator 包和spring-cloud-starter-netflix-hy…

交互式探索微生物群落与生态功能的关系

微生物群落在生态系统中发挥则重要功能&#xff0c;我们在对微生物群落进行分析时&#xff0c;会将不同分类水平&#xff08;从门到属&#xff09;的微生物类群的相对丰度与测定的某一生态功能进行相关性分析。但由于微生物类群数较多&#xff0c;又有不同的分类水平&#xff0…