LINUX 下动态,静态链接库实战

2024-04-27 10:32

本文主要是介绍LINUX 下动态,静态链接库实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于动态链接库和静态链接库的概念以及链接方式不再累赘。直接开始上代码和进行编译。-__-||。

 

代码很简单,横竖就三个当家的。

 

库头文件corey.hpp:

 

库实现文件corey.cpp

入口函数main.cpp:

 

静态库:

先建立static文件夹,将三文件分别置于其中。

1)生成静态库

g++ -c corey.cpp


ar -rc libcorey.a corey.o

 

同时请注意命名。

 

2)编译main.o

gcc -I /home/corey/static -o main.o -c main.c

此时-I指定了corey.hpp文件的目录,默认会去/usr/include和本目录中查找,可将文件放置在这两个位置,则可不比指定I。

我们知道编译的时候,只需要指定头文件即可。

 

3) 链接main

gcc -o main -L/home/corey/static main.o -lcorey   (corey为省去了lib,a的库名)

 

并且参数-l必须在输入文件之后。

我们可以选择把libcorey.a文件放置在/usr/lib文件夹中,可以省去指定-L参数。

 

4)执行main

执行main程序,无需程序库的参与。

 

 

动态库:

建立文件夹so,将三文件放置其中。

1)编译动态库。

g++ -fpic -shared -o libcorey.so corey.cpp

 

2)编译main.o

gcc -I /home/corey/static -o main.o -c main.c

此时-I指定了corey.hpp文件的目录,默认会去/usr/include和本目录中查找,可将文件放置在这两个位置,则可不比指定I。

我们知道编译的时候,只需要指定头文件即可。

 

3)链接main

gcc -o main -L/home/corey/static main.o -lcorey   (corey为省去了lib,a的库名)

 

并且参数-l必须在输入文件之后。

我们可以选择把libcorey.a文件放置在/usr/lib文件夹中,可以省去指定-L参数。

 

4)执行main

提示没有加载库

./main: error while loading shared libraries: libcorey.so: cannot open shared object file: No such file or directory

5)echo /home/corey/so >> /etc/ld.so.conf

 

6)ldconfig

 

7)执行成功。

 

这篇关于LINUX 下动态,静态链接库实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940262

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什