动\静态库

在VS2015中导入/创建静态库并使用静态库【VS+Qt项目开发系列】 本项目示例源码已经上传,欢迎点击下载~注:静态库——在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件。解决方案文件夹目录如下所示——我们接下... 阅读详情

原理:
将源码文件编译成自己的目标文件(即:从.c 文件编译成 .o文件)
然后通过不一样的链接方式,生成动态库(.so)、静态库(.a)或可执行文件(.exe)
动态库可以直接通过源码编译生成

静态库
程序在运行之前将静态库链接到可执行文件中,程序运行时不再需要静态库
生成方法:
1.xxx.c --> xxx.o
2.通过 ar -rc libxxx.a xxx.o 将xxx.o --> libxxx.a
3.在编译main.c时,通过 -L. -libxxx.a 链接至可执行文件
gcc main.c -L. -libxxx.a
显示:
在这里插入图片描述
查看静态库内容:
objdump -S libxxx.a
动态库:
程序在运行的时候,才链接动态库至可执行文件 (可多个程序同时使用动态库)
优点:节约内存和磁盘空间(动态库共享)

生成方法:
1.生成位置无关码:gcc -fPIC -c xxx.c
(xxx.c —> xxx.o)
2.产生共享库格式:gcc -shared -o libxxx.so xxx.o
(xxx.o —> libxxx.so)
3.在编译main.c时,通过 -L. -libxxx.so 链接至可执行文件
gcc main.c -L. -libxxx.so
显示:
在这里插入图片描述
注意:
静态库在生成可执行文件之后可以删除,不影响文件的正常执行
在这里插入图片描述
动态库在生成可执行文件之后不能删除,否则文件会运行失败
失败原因是:error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory(即:找不到动态库)
在这里插入图片描述

注:关于-fPIC 生成位置无关码,实现真正意义上的多个进程共享so文件,这一个库在不同进程中的虚拟地址不同,但操作系统会把它们映射到同一块物理内存上。
请多多指教!!
,在这里插入图片描述

Linux:软/硬链接 动/静态库 为了能解释清楚inode我们先简单了解一下文件系统: 超级块:存放文件系统本身的结构信息 inode:存放文件属性,如文件大小,所有者,最近修改时间等 数据区:存放文件内容 事实上,真正找到磁盘上文件的并不是文件名,而是inode。 inode (1)查看每一个目录下每个文件的inode号 [a@localhost ~]$ ls -i 270062 \ 269732 ... 阅读详情

相关推荐

ollama环境变量配置:修改ollama的数据路径(安装路径)

ollama安装模型,如果很大,会占用C盘空间,影响系统运行速度,通过设置环境变量,来改变ollama放目录的地址。

正经教主是个热衷于正经学习分享的教主。 1万+

动态链接库中使用c++类的方法

以前的关于动态链接库的写法多是直接采用extern 'C'的方式来实现,但是如果采用类来编写就会出现问题了,因为类在编译时是不能确定入口点位置的。这样就产生了问题。怎么来使用呢?前两个方法是在linux下直接使用普通函数调用的方法来实现的。后边的是在vc++中使用宏来对入口点动态调整输入输出__declspec(dllimport)和__declspec(dllexport)   方法1:

开发者说 1万+

virtualbox虚拟机里面最顶部没有控制、设置和帮助等选项

无意中操作,导致virtualbox虚拟机里面最顶部没有控制,设置和帮助选项  virtualbox虚拟机窗口显示如下如: 如何设置,窗口显示如下图所示呢: virtualbox虚拟机窗口模式显示设置,切换可以通过如下图所示操作进行切换: PS:一定要是右边的Ctrl+C

WEL测试 8780

用gcc生成静态库和动态库

hello.h hello.c main.c 2. 将hello.c编译得到.o文件 创建静态库的工具: ar 静态库文件命名规范:以lib作为前缀,是.a文件 gcc -o hello main.c -L. –lmyhello gcc main.c libmyhello.a -o hello 先生成 main.o : gcc -c main.c 再生成可执行文件: gcc -o hello main.o libmyhello.a创建动态库的工具:gcc 动态库文件命名规范:以lib作为前缀,是.so文件我

qq_63793647的博客 293

SAP子公司财务账套配置实战:从公司代码到记账期间变式的关键步骤

本文详细介绍了为SAP子公司快速配置财务账套的实战步骤。通过复用母公司成熟配置,重点阐述了从创建公司代码、关联控制范围到分配记账期间变式的核心流程,帮助顾问在一两个小时内完成核心骨架搭建,实现高效集团财务管控。

cake8的博客 166

FOC电机控制实战:增量式编码器零位校准的5个关键步骤(附STM32代码)

本文详细解析了FOC电机控制中增量式编码器零位校准的5个关键步骤,包括电角度锁定、定时器计数清零、机械偏移角补偿等,并提供了STM32平台的实战代码。通过精准的零位校准,可显著提升电机控制系统的精度和稳定性,适用于工业伺服和机器人关节等高精度场景。

rum55的博客 618

cmake多个目录文件生成一个动态库

这个简单的例子演示了如何在CMake中从多个目录中的源文件创建一个动态库。根据项目的实际需求,CMakeLists.txt文件可能需要包含更多的配置指令,例如设置编译选项、链接库或处理平台特定的需求。接下来,你需要收集所有需要编译进动态库的源文件。这里,cmake_minimum_required指定了该项目需要的CMake的最小版本。在CMake中创建一个动态库(或共享库)并将多个目录中的源文件编译进这个库是一个常见需求。这会在一个名为build的目录中创建项目的构建系统,并编译生成动态库。

weixin_39291964的博客 1508

uniapp - Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not suppo

Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not supported for code-splitting builds. uniapp 编译报错,vite vue3 Hbuilder 中编译报错,uniapp 打包 App 报错(vue3)hbuilder提示错误,uniapp运行到手机/模拟器 App 报错(vue3)uniapp项目启动报错,如何解决这个问题,安卓app,苹果app

🏆 前端领域优质创作者 3966

Linux下静态库与动态库的引用关系深入分析

很久就想写一篇关于动态库和静态库互相引用的一篇文章,但是总感觉准备不充分,而一直没有勇气下笔,最近在和同事的讨论中,似乎有了一些新的认识,想把这些记录下来,和大家进行一次分享,同时也是做一次记录。 这篇文章将从以下几个方面进行分析讲解 1.程序的编译过程 2.什么是静态编译,动态编译 3.如何生成静态库,如何生成动态库 4.动态库和静态库相互引用后,应用程序是否可以只使用一个库 (例如:应用用到了静态库a,而静态库a里使用了库b,那么应用程序是不是只要链接a就可以了呢) 5.动态库的两种加载方

zhc的博客 5981

微信小程序 - 详细实现打开跳转第三方 H5 网页链接,在微信小程序内直接跳转打开第三方网站链接详细教程(支持跳转公众号文章等,直接复制代码即可)

小程序跳转h5,小程序-Taro小程序中打开h5页面链接,...小程序跳转h5链接(web-view)_微信小程序,小程序如何跳转h5页面,小程序跳转到第三方H5网页,微信小程序跳转第三方H5的方法,小程序-实现怎么跳转打开H5网页链接(或跳转至公众号文章,打开第三方网站,放校验文件,怎么配置业务域名,校验文件验证域名,把校验文件放到对面网站,别人的服务器也打不开没权限怎么放呢,勾选不校验合法域名,txt,打不开别人的网页怎么办,真机调试打不开,无法跳转,有什么其他办法不放校验文件吗,后台配置,怎么

🏆 前端领域优质创作者 3万+

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 285

linux动态库编译多重依赖,Linux动态库多重依赖

1、动态库依赖关系test->hello->world2、源文件//world.cpp#include void world(void){printf("world.\n");}//hello.cpp#include void world(void);void hello(void){printf("hello\n");world();}//test.cppvoid hello(voi...

weixin_28990495的博客 316

ROS机器人里程计模型

3.5 移动机器人系统模型 相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Are you ready? 没准备好也开始了。 3.5.1 常用坐标系系统模型 在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XR YR OR 、传感器坐标系XS YS OS

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

C动\静态库编译

相同目录下有同名的静态库libxxx.a和动态库libxxx.so的时候,编译链接(-L…/ -lxxx)的时候,是如何区分链接的是静态库,还是动态库的呢?2. 相同源码的静态库是要比动态库要大的,因为静态库包含所有可能使用到的代码,而动态库是记录主要的符号信息。程序运行时动态链接的化,会去定位寻找符号,是会默认在LD_LIBRARY_PATH指定路径下寻找动态库的。1. 程序(静态库)和文件系统(动态库)的压缩算法可能相同,可能不相同。编译的时候,编译器会在在指定的库的路径下搜索对应的库名,进行链接。

m0_47104421的博客 338

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Linux 动、静态库原理深剖

带你一命通关 Linux 动静态库原理 十分钟手撕底层内涵

qq_61500888的博客 7667

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Opencv静态库,编译和调用静态库,静态库链接另一个静态库

Opencv静态库,编译和调用静态库,静态库链接另一个静态库,ubuntu qt

tony365的博客 7256

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

动态库、静态库编译测试:含静态库链接动态库、静态库,动态库链接静态库、动态库

本文的目的是测试各种类型库的编译后的使用效果,包括库又链接其他库的编译方法,使用方法,依赖性等。 太长不看版:请跳至文章最后的总结对比表。 一。内容包含: ①静态库libbb.a依赖静态库libaa.a的测试; ②静态库libbb.a依赖动态库libaa.so的测试; ③动态库libbb.so依赖静态库libaa.a的测试; ④动态库libbb.so依赖动态库libaa.so的测试; ...

AmyAndTommy的博客 6669

C++程序中使用C编写的静态库

C++程序中使用C编写的静态库 小虾一直从事Unix下的C的开发,不久前因为项目的需要,编程时需要使用C++提供的标准库来解决一些问题。小虾虽然接触过C++,但是真正使用它来编大型的程序还是头一次,所以不免碰到一些弱智的问题,也许对于大虾们来说,这本来就不值得一提,但是我还是想把它记录下来,因为在成长的道路上也许有人和我一样需要这些最基础的东西。 在UNIX下编程的人时间长了都会累计一些自

毛毛的窝 4156

软件库Library之静态库\动态库和静态加载\动态加载

软件库Library之静态库\动态库和静态加载\动态加载 动态库之导入库 https://blog.youkuaiyun.com/wallaceli1981/article/details/5740718 * 动态库在开发时仅是把dll中的函数名和参数放到应用程序中,应用程序运行时根据函数名和参数调用dll中的函数来运行,这样操作系统中的应用程序可以同时使用同一个dll。可以有效地节省硬盘空间...

行知致简的专栏 3016

C\C++_库_静态库的封装和使用

环境介绍 vs2010 静态库创建 生成静态库 一、新建工程 先新建工程 选择Win32 Console Application Application type——Static library Additional options——Empty project, 去除Precompiled header的勾选项 二、 编译生成静态库 使用静态库 一、新建工程 二、配置工程属性 三、引用头文件 ...

qq_38255284的博客 795

Linux小黑板(1):vim编辑器的使用 / 动、静态库的理解

我们在使用诸如printf、scanf 等等函数时,我们自己本身就没有实现,为什么我们在include头文件后 ,就可以进行使用了呢?要想在 linux系统环境下编程,使用 难以被替代且功能强大的vim编辑器是首当其冲的不二法门。2.在linux下 当我们调用库函数时,编译器会为我们 链接动态库 还是静态库?所谓的vim配置,就是去更改 在“家目录下的”, ".vimrc"文件内容。理解了上述的 例子,我们对动、静态库 即有了一个感性的认识。根本上是因为 在链接的时候,编译器会自己去找系统库的位置!

RNGWGzZs的博客 780

C语言静态库与动态库

库 是一种代码的二进制的封装形式,将.o文件打包封装就成了库。库可以在任何地方使用,但用户却不能看见他的具体实现。库有利于代码模块化,只要接口设计得合理,改变库的内部实现,不会影响到用户级别的代码使用。

chengxuyuanlaow的博客 594

vs2022配置opencv静态库

本文将在windows10环境下,vs2022+Cmake3.24.4编译opencv静态库,包括win32-release,win32-debug, x64-release, x64-debug四种;文章内容有点长,请耐心看下去。

weixin_42615026的博客 2763

android java 静态库_NDK jni 加载静态库

加载静态库到android,静态库的提供方式有2种,a. 通过源文件来编译静态库b. 加载已经编译好的静态库首先我们来看,通过源文件来编译静态库,工程目录如下第一步:我们来看我们的jni目录,目录下包含以下4个文件Android.mk --- 编译文件first.c ,first.h --- 外部需要引用的文件second.c ---- 我们的jni转换文件首先我们简单的看下源码#includ...

weixin_42110070的博客 910

CMake 之静态库依赖动态库,如何使用该静态库

参考: 静态库链接动态库时,如何使用该静态库_newchenxf的专栏-优快云博客_链接静态库 1.先建立如下工程目录文件

zion--6135的博客 3085

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

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

kchmmd的博客 1万+
上一篇: 软\硬连接
下一篇: 进程间通信----管道
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值