![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
编译、链接、库
文章平均质量分 66
关于编译、链接等与代码非直接相关的领域
咖啡与乌龙
这是一个知识分享型宝藏博主,本科测控技术与仪器,研究生仪器科学与技术,自学计算机技术,目前在sangfor担任后台开发工程师,职场新人小菜鸟一枚。欢迎大家关注,相互交流,相互学习,共同进步!!!
展开
-
Qt中使用静态库.lib(和VS一样,仅仅是操作方式略有差异)
本篇文章我们讲在Qt中使用静态库①导入库—②添加头文件—③包含头文件—④正常使用注意:当把库文件移除后,也即没有上述的第1步(导入库),会出现无法解析的外部符号等错误①代码形式导入库(绝对路径)—②添加头文件—③包含头文件—④正常使用......原创 2022-07-07 09:05:35 · 7561 阅读 · 1 评论 -
线程同步---信号量以及与互斥锁构建生产者消费者模型
信号量是用在多线程多任务同步的,通过信号量的资源数来决定是否阻塞线程。信号量可以在没有资源时阻塞线程,也可以主动去增加某个线程所用到的资源数如果信号量的资源数充足,则可能发生多个线程同时访问共享资源,因此需要配合mutex一起使用,进行线程同步...原创 2022-07-09 20:13:33 · 205 阅读 · 0 评论 -
线程同步---条件变量以及结合互斥锁构建生产者消费者模型
条件变量是进行线程阻塞的一种机制,经常和`互斥锁`结合起来处理生产者消费者模型条件变量给多线程提供了一个会合的场所。条件变量与互斥锁一起使用时,允许线程以无竞争的方式等待特定的条件发生条件变量只有满足特定条件(如,任务队列已满或已空)时才会阻塞线程;如果条件不满足,多个线程可以同时进入临界区,同时读写共享资源,因此还是会造成共享资源的混乱;因此条件变量通常要和互斥锁一起使用,利用互斥锁保证线程同步。...原创 2022-07-09 20:09:43 · 190 阅读 · 0 评论 -
线程同步---互斥锁的升级版:读写锁
读写锁的读锁锁定临界区之后,线程对临界区的访问是并行的,读锁是共享的;多个线程可以同时访问被读锁锁定的区域读写锁的写锁锁定临界区之后,线程对临界区的访问是串行的,读锁是独占的;类似互斥锁,写锁被锁定时,其他的线程无法获取锁使用读写锁,同时对两个临界区加了读锁和写锁,两个线程需要同时访两个临界区,此时访问写锁临界区的线程优先执行,因为其优先级高于读锁.........原创 2022-07-09 19:51:39 · 149 阅读 · 0 评论 -
线程同步---互斥锁和用锁不当造成的死锁现象
所谓互斥锁,其实是附加了一个条件,也就是在获得锁的条件下才能运行锁住的代码锁应该是多个线程的共享资源,这样才能起到避免竞争的作用二、死锁1.什么是死锁?死锁:是因为线程在加锁时使用不当,造成的所有的线程都被阻塞的情况,并且线程的阻塞无法被打开,属于无解状态,就是死锁2.死锁场景①加锁之后忘记解锁②重复加锁,造成死锁③程序中有多个共享资源,因此有很多锁,随意加锁,导致互相被阻塞(互锁).........原创 2022-07-09 19:40:23 · 1699 阅读 · 0 评论 -
线程同步与线程同步的必要性
线程同步非常重要,常用的线程同步方式就是加锁。锁是一种非强制机制,每一个线程在访问数据或资源之前都应该获取锁(或者说上锁、lock),并在访问结束之后释放锁(或者说解锁、unlock)。在锁被别的线程占用时,当前线程就需要等待也即是阻塞,直到锁被释放,然后当前线程抢到锁了,才能继续执行。.........原创 2022-07-09 16:57:04 · 438 阅读 · 0 评论 -
在VS和Qt中使用动态链接库.dll---以显式链接的方式
在VS和Qt中使用动态链接库.dll(显式链接)编译输出,会生成和,将拷贝到Qt项目目录使用Qt自带的类QLibrary,加载并使用相关的参考文献:原创 2022-07-07 09:44:56 · 1345 阅读 · 0 评论 -
在Qt和VS中使用动态链接库.dll文件----以隐式链接的方式
①用代码方式或IDE方式导入文件,如上所述 ②添加并包含 ③正常使用注意:有.lib文件的动态库的使用和静态库使用非常相似,区别仅仅在于,使用动态库时,需要将dll文件拷贝到.exe的同级目录或环境变量中同样的,也可以在Qt上隐式调用......原创 2022-07-07 09:39:25 · 2568 阅读 · 0 评论 -
VS中创建.dll动态链接库、dll中函数与类的导出用__declspec(dllexport)
正确做法:使用进行导出dll函数,编译构建后生成2个文件,一个是,一个是。再结合对应了dll隐式链接调用的三件套:文件、、错误做法:如果不使用而直接编译构建dll库,仅生成,不生成,这是错误的导出方式,将导致无法使用生成方式:注意:在创建动态链接库时,主要是为了适配QLibrary中中,如果用C++编译器编译C代码时的情况............原创 2022-07-07 09:17:07 · 1562 阅读 · 0 评论 -
使用Visual studio中创建C++的静态链接库.lib文件附使用方式
静态链接库的创建和使用原创 2022-06-26 22:11:54 · 3339 阅读 · 2 评论 -
002-编译和链接(从源文件.cpp到可执行文件.exe可执行文件到底经历了什么?)
编译和链接都发生了什么?1 前言.cpp文件到可执行文件.exe中间的过程如下图所示(预编译-->编译-->汇编-->链接)4个步骤2 预编译(Propressing)预编译主要就是处理宏定义,将其展开等工作3 编译(Compliation)编译主要负责识别源代码,并将其转换成优化后的汇编代码4 汇编(Assembly)汇编是一个理解起来比较简单的过程:对应不同的机器的指令集,将汇编代码一条一条翻译为机器指令5 链接(Linking)链接主要负责将目标文件(.o文件)和库文件整合起来,就原创 2021-01-10 11:10:56 · 447 阅读 · 0 评论 -
线程安全与锁
线程安全与锁1、线程之间的竞争2、原子操作3、同步与锁1、线程之间的竞争1> 假如两个线程都对一个变量有访问和修改,并且修改的这个过程不是原子操作(也即是多步完成),那么就有可能存在线程1正在操作该变量,该变量又被线程2操作,这样将导致数据处理的严重错误2> 这个就是所谓的竞争,解决竞争的方式,有使用原子操作、添加锁;2、原子操作1> 原子操作 : 操作只有一步,不会被其他的操作打断;2> 系统一般会带有一些原子操作的函数留给用户使用,但是数量较少,并且一般只能用于简单原创 2021-01-06 10:23:11 · 132 阅读 · 0 评论