静态库,动态库的创建与使用

【Qt】Qt动态库和静态库的创建和使用 动态库(共享库)的创建在Qt Creator中新建项目,选择Library 点击“Choose”进入下一步选择创建库的类型:共享库选择Kit套件选择需要的模块配置工程路径、名字等Qt Creator自动创建的文件我配置的动态库名字为:Share pro文件内容QT -= gui #在选择需要的模块时,我只选用了QtCore,没有使用QtGui TARGET = Share #我配置的 阅读详情

1.静态库

静态库的概念

  • 静态库就是一些.o目标文件的集合,以.a结尾。
  • 静态库在程序链接的时候使用,链接器会将程序中使用到函数的代码从库文件中拷贝到可执行文件中。一旦链接完成,在执行程序的时候就不再需要链接静态库了。
  • 由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以生成的可执行文件会比较大。

静态库的创建

ar rcs lib库文件名.a 目标文件1 目标文件2 ... 目标文件n

  • r表示将.o的目标文件加入到静态库中;
  • c表示创建静态库;
  • s表示创建索引;
  • 创建的库文件名字前面建议加上前缀lib,即lib库文件名.a 。

静态库的使用

1.执行命令

  1. gcc -o 可执行文件 调用者的目标文件 -Ldir -l库文件名
  2. gcc -o 可执行文件 -Idir 调用者的C源文件 -Ldir -l库文件名

2.使用实例

momo@anan:~/usr/dev/cc$ gcc -o ./obj/mysum.o -c ./func/mysum.c 
momo@anan:~/usr/dev/cc$ ls -trl ./obj/mysum.o 
-rw-rw-r-- 1 momo momo 1232 5月   2 23:19 ./obj/mysum.o
momo@anan:~/usr/dev/cc$ ar rcs ./lib/libmysum_jingtai.a ./obj/mysum.o
momo@anan:~/usr/dev/cc$ gcc -o ./bin/mysum_jingtai ./main/mymath.c -L./lib -lmysum_jingtai
momo@anan:~/usr/dev/cc$ ./bin/mysum_jingtai 
请输入第一个数:
1
请输入第二个数:
2
1+2=3

2.共享库

共享库的概念

  • 共享库即动态链接库,在Linux中以.so(shared object)为后缀,windows中以.dll为后缀。
  • 共享库在程序的链接时候并不像静态库那样会拷贝使用函数的代码,而只是做些标记。在程序开始启动(实际上在加载程序时)运行的时候,加载所需的函数。
  • 可执行程序在执行的时候仍然需要共享库的支持。
  • 共享库链接出来的文件比静态库要小得多。
  • C语言中所有标准的共享库放置在/usr/lib目录中。

共享库的创建

gcc -shared -fPIC -o lib库文件名.so 目标文件1 目标文件2 ... 目标文件n

  • -shared 表示使用共享库
  • -fpic或者-fPIC表明创建产生独立目标代码(位置无关代码),具体应用取决于平台

共享库的使用

1.执行命令

  1. gcc -o 可执行文件 调用者目标文件 -Ldir -l库文件名
  2. gcc -o 可执行文件 -Idir 调用者的C源文件 -Ldir -l库文件名

2.使用实例

momo@anan:~/usr/dev/cc$ gcc -o ./obj/mysum.o -c ./func/mysum.c 
momo@anan:~/usr/dev/cc$ ls -trl ./obj/mysum.o 
-rw-rw-r-- 1 momo momo 1232 5月   2 23:41 ./obj/mysum.o
momo@anan:~/usr/dev/cc$ gcc -shared -fpic -o ./lib/libmysum_dongtai.so ./obj/mysum.o 
momo@anan:~/usr/dev/cc$ gcc -o ./bin/mysum_dongtai ./main/mymath.c -L./lib -lmysum_dongtai
momo@anan:~/usr/dev/cc$ ./bin/mysum_dongtai 

./bin/mysum_dongtai: error while loading shared libraries: libmysum_dongtai.so: cannot open shared object file: No such file or directory

第一种解决方式:将我们用到的动态库文件复制到/usr/lib目录下;

momo@anan:~/usr/dev/cc$ sudo cp ./lib/libmysum_dongtai.so /usr/lib
[sudo] momo 的密码: 
momo@anan:~/usr/dev/cc$ ls -trl /usr/lib/libmysum_dongtai.so 
-rwxr-xr-x 1 root root 7648 5月   2 23:45 /usr/lib/libmysum_dongtai.so
momo@anan:~/usr/dev/cc$ ./bin/mysum_dongtai 
请输入第一个数:
1
请输入第二个数:
2

1+2=3

第二种解决方式:创建临时环境变量,将我们的动态库所在目录存在该变量中

momo@anan:~/usr/dev/cc$ sudo cp ./lib/libmysum_dongtai.so /usr/lib
[sudo] momo 的密码: 
momo@anan:~/usr/dev/cc$ ls -trl /usr/lib/libmysum_dongtai.so 
-rwxr-xr-x 1 root root 7648 5月   2 23:45 /usr/lib/libmysum_dongtai.so
momo@anan:~/usr/dev/cc$ ./bin/mysum_dongtai 
请输入第一个数:
1
请输入第二个数:
2

1+2=3

3.运行可执行文件的出错解决方案(库文件找不到)

  • cp libmysum_dongtai.so /usr/lib (需root用户操作)
  • export LD_LIBRARY_PATH=库文件的目录
手把手教你利用qemu搭建银河麒麟V11 arm环境 在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。 阅读详情

相关推荐

抖音私信卡片私信名片的原理分析

简单说一下它的功能吧:抖音私信卡片,解决了客户封号严重、引流效率低的痛点,所以从去年到现在,依然是热销品。"抖音快手私信名片链接跳转"是2022年抖音快手引流最新技术,可以生成卡片链接,支持标题、描述、logo以及跳转落地页的完全自定义配置.支持微信公众号和微信号复制唤起微信客户端app添加,同时也支持任意链接落地页跳转提高粉丝引流转化率,关注转化率,引流转化率,安全绿色私信卡片功能1、跳转微信用户点击卡片,自动跳转微信界面,显示好友和群聊二维码2、跳转链接用户点击卡片,自动跳转到指定链接,支持任意链接。3

m0_71385839的博客 5189

03_静态库和动态库的制作和使用

静态库的制作 静态库的特点 1.命名方式 静态库的命名统一为:lib + 静态库名 + .a 2. 静态库的优点 寻址方便、速度快 静态库中会被用到的模块会被一次性打包到可执行程序中 发布的可执行程序可直接使用不需要再依赖于静态库 3. 静态库的缺点 静态库的代码在编译过程中会被载入可执行目标程序中,因此体积较大。 如果静态函数库改变了,那么之前发布的程序必须重新编译。 4. 使用场景 在核心程序上使用,保证速度,可忽视空间,主流应用于80、90年代,现在很少用 制作过程 1. 创建存储文件夹:

子居的博客 1313

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9914

【Linux系统编程学习】 动态库的制作与使用

本系列为牛客网Linux C++课程的课程笔记。 1. 动态库命名规则 2. 动态库的制作 第一步,用gcc编译生成.o目标文件,注意要用-fpic参数生成与位置无关的代码; 第二步,用gcc的-shared参数生成动态库。 涉及到的两个参数之前学过: 代码演示: 一个简易版计算器程序目录如下: 然后执行: gcc -c -fpic add.c div.c mult.c sub.c 用gcc编译成与位置无关的.o目标文件 然后执行: gcc -shared add.o div.o mult.o s

fjtooo的博客 424

GitHub 新手使用手册

理论说太多容易忘,来实践实践吧。

2501_90226046的博客 1053

【参数不确定】敏感性分析(sensitivity analysis)

【运筹学】灵敏性分析

羊肉蛋花汤的博客 14万+

头歌Linux实验——C语言编程

头歌Linux实验——C语言编程

2201_75390271的博客 3419

lstm如何输入多维序列_深度学习也可以做时间序列异常诊断

最近在看的一篇论文里,用到了GRU、VAE等技术来做多维时间序列异常诊断。那么今天首先来聊一聊深度学习的基础知识,然后简单说一下论文。以下基础知识部分的内容,主要来源于李宏毅老师的课程。有兴趣的可以去看李老师的课程哦https://www.bilibili.com/video/BV1JE411g7XF?p=1 1、GRU(Gate Recurrent Unit):GRU是循环神经网络(Recurr...

weixin_30899789的博客 2833

Linux环境下c语言静态链接库和动态链接库创建和使用

库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。 面对比一下两者:     静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。 动态库而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个

x1r2p3的专栏 8332

东华大学2020考研计算机OJ题目解答分享——进阶篇(4)

4 一个月的天数 作者: Turbo时间限制: 1S章节: 分支结构 问题描述 : 输入年和月,输出该月有几天。 输入说明 : 输入两个整数,中间以空格分隔,第一个整数表示年,第二个整数表示月。 输出说明 : 输出该年该月的天数,输出时,行首与行尾均无空格,仅输出一个整数。 输入范例 : 2000 2 输出范例 : 29 解答思路: 闰年和质数出题一样频繁,简单必会 AC代码 #include...

qq_38344326的博客 472

基于C++的MMC仿真与PSCAD建模

MMC是一种基于模块化设计的多电平换流器,通常由若干个基本单元(子模块)组成。每个子模块包含一个电容和两个开关,通过控制开关的开闭,实现输出电压的级联和多电平化。高效率:由于开关频率较低,开关损耗小,效率高。高可靠性:模块化设计使得故障模块易于更换,提高了系统的可靠性。灵活扩展:可以通过增加或减少子模块的数量,方便地调整输出电压和功率。PSCAD(Power Systems Computer Aided Design)是广泛应用于电力系统仿真的专业软件,具有强大的建模和仿真能力。

qq_38334677的博客 295

【Linux系统编程学习】 静态库的制作与使用

本系列为牛客网Linux C++课程的课程笔记。 0. 关于静态库与动态库 1. 静态库命名规则 2. 静态库的制作 演示如下: 一个简易版计算器程序目录如下: 然后执行: gcc -c add.c div.c mult.c sub.c 用gcc编译成目标文件 然后执行: ar rcs libcalc.a add.o div.o mult.o sub.o 生成了名为libcalc.a的静态库文件。 3.静态库的使用 首先将刚才涉及到的文件整理一下: 此时编译main.c文件,执行: gcc m

fjtooo的博客 310

RK3568平台开发系列讲解(中断及异常篇)中断下半部:中断线程化

以前用 work 来线程化地处理中断,一个 worker 线程只能由一个 CPU 执行, 多个中断的 work 都由同一个 worker 线程来处理,在单 CPU 系统中也只能忍着 了。少数中断不能线程化,典型的例子是时钟中断,有些流氓进程不主动让出处理器,内核只能依靠周期性的时钟中断夺回处理器的控制权,时钟中断是调度器的脉搏。中断处理线程是优先级为50、调度策略是SCHED_FIFO的实时内核线程,名称是“irq/”后面跟着Linux中断号,线程处理函数是。,说明是线程化的中断,那么唤醒中断处理线程。

内核笔记 435

Qt 动态库和静态库的创建与使用

前言 c/c++开发中都会用到动态库和静态库。首先动态库和静态库的区别是什么呢? 简单来讲,静态库,如果某个程序需要调用了一个静态库中的方法,在该程序编译时候会将该静态库一起编译进去,即会直接整合到目标程序中,编译成功的可执行文件可独立运行。静态库的扩展名一般为“.a”或“.lib” 而动态库,某个程序在编译的时候,在程序里只有一个“指向”的位置而已,也就是说当可执行文件需要使用到函数库的机制时,程序才会去读取函数库来使用,也就是说可执行文件无法单独运行。 静态库与动态库优缺点大概如下 1、静态库 优点:

kchmmd的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Visual Studio 2022静态库与动态库创建及使用完全指南

在C++开发中,库(Library)是代码复用的重要方式。本教程将详细介绍如何在Visual Studio 2022中创建和使用静态库(.lib)和动态库(.dll),每种库类型都会有完整的创建步骤和实际示例。

yy_xzz的博客 4535

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

动态库、静态库的创建及使用

将自己写的代码封装在一个库中,方便其他人使用并且对代码还有一定的保密作用。 库是一种可执行代码的二进制形式,可以被操作系统载入内存执行

ぃ未来可期 643

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Qt中动态库和静态库的创建和使用方法

DEFINES += SHARE_LIBRARY #将SHARE_LIBRARY添加为编译时的预处理器宏,在share_global.h中使用。因为是动态库,没有编译到可执行文件中,所以需要将动态库,部署到可执行文件的能够使用的库路径中,一般放到可执行文件同目录下。我定义的头文件为Share.h、share_global.h,将这两个头文件拷贝到使用库的工程目录中,并添加到工程中。我定义的头文件为Static.h,将这个头文件拷贝到使用库的工程目录中,并添加到工程中。生成执行文件时为:app。

u011555996的博客 1049

Linux系统编程——超级详细讲解静态库、动态库的创建、打包和使用

在Linux环境下,我们使用gcc编译连接代码时,可以分为静态链接和动态链接。静态链接即在编译链接时,将代码所使用到的静态库文件代码全部加入到可执行文件中(拷贝实质上是将库文件的代码展开拷贝至我们的可执行程序的代码段。,这样做的缺点是可执行文件会生成的比较大,优点是此时再运行可执行文件就不需要再查找库了。静态库文件一般以.a结尾。动态库链接不会在编译时将动态库文件的代码加入到可执行文件中,而是在可执行文件运行时,去查找所需的动态库,并将其加载到相应的进程中,并且不同的进程可以共享这些动态库。

学习日记 3395

iOS静态库和动态库的创建和使用

关于iOS动态库和静态库的使用优缺点已在上篇中说过了,我们自定义的库为cocoaTouchFrameWork,本篇就来记录下库的创建和简单的使用。 静态库的创建和使用: 创建cocoaTouchFrameWork项目: 打开Xcode选择新建项目 > 选择创建的类型为上图中的CocoaTouchFrameWork类型。 本例中sdk库名为LMSDK,项目创建完成后,在LMSDK目...

黎明的博客 842

静态库&动态库的创建和使用

一. 静态库的创建 i. 创建一个空项目(也可以直接选择动态库项目,VS会自动生成框架)。 在已安装的模板中选择“常规”,在右边的类型下选择“空项目”,在名称和解决方案名称中输入staticlib。点击确定。 ii. 添加头文件和源文件 在解决方案资源管理器的头文件中添加,mylib.h文件,在源文件添加mylib.c文件(即实现文件) iii. 在mylib.h文件中添加如下代码 #ifndef TEST_H #define TEST_H int myadd(int a,int b)

lin 346

静态库与动态库的创建与使用

1. 基本概念 静态库:链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 linux / windows 下扩展名分别为:.a / .lib 动态库:链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。linux / windows 下扩展名分别为:.so / .dll 区别主要体现在: 可维护性。 合入更新。合入动态库的更新,只要替换库即可。但合...

weixin_34356138的博客 638

【Linux】静态库和动态库的创建与使用--示例讲解

本文将介绍动态库和静态库及其优缺点,创建与使用等,搭配示例讲解,简单易懂!

logani的博客 1789

【CMake】CMake创建、安装、使用静态库和动态库

本文介绍了使用CMake创建和管理静态库/动态库的方法。首先通过示例代码展示了如何编写CMakeLists.txt文件,分别使用ADD_LIBRARY命令生成动态库(SHARED)和静态库(STATIC)。针对同时生成两种库的需求,详细说明了SET_TARGET_PROPERTIES关键字的使用方法。随后讲解了如何通过INSTALL命令将库文件、头文件安装到系统目录。最后演示了如何使用已安装的库,包括设置头文件搜索路径和库链接方法,重点介绍了LINK_DIRECTORIES和TARGET_LINK_LIBR

Antonio915的博客 1499

Qt 创建与使用动态库与静态库

Qt 使用动态库与静态库 原文出处: http://www.cnblogs.com/SkylineSoft/articles/2046318.html 一. 静态库的生成     1. 测试目录: lib     2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为"I'm in class MyW

cibiren2011的专栏 1万+

Linux下静态库、动态库的创建和使用

静态库、动态库的创建和使用 1.按照如下目录,建立如下文件 2.创建静态库 创建lib文件夹,用来存放库文件 编译连接,生成可执行程序: 显示目录和文件: 静态库:app放到哪里都可以运行,因为静态库已经编译到app中,也导致其代码体积庞大 动态库:运行的电脑需要有动态库,且版本号要一致,但是其代码体积小。 创建动态库(共享库) gcc -shared -Wl,-s

YunLan天地间 631

linux静态库文件扩展名,linux静态库和动态库的创建与使用

静态库与动态库的创建与使用1. 基本概念静态库:链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 linux / windows 下扩展名分别为:.a / .lib动态库:链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。 linux / windows 下扩展名分别为:.so / .dll区别主要体现在:a、可维护性。合入更新。合入动态库的更新,只要替换库即可。但合入静态则需...

weixin_31653645的博客 1240
上一篇: RedHat7.4安装mysql 5.7.21
下一篇: make及makefile学习
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值