Visual Studio引入外部库 ---- 弄懂静态库lib和动态库dll

这两天由于想要研究一下socket的相关内容,但是没想到引入外部库还有这么多门道。

根据维基百科定义:一个现代编译器的主要工作流程如下:源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(linker)→ 可执行文件(executables),最后打包好的文件就可以给计算机去判读运行了。所谓的IDE(集成开发环境)不过是把这些步骤集成到一起,程序员可以专注于代码实现。


.cpp文件编译过程

以hello.cpp文件为例,编译执行这个文件需要经过一下几个步骤:

  1. 预处理:执行gcc -E hello.cpp > hello.i对.cpp文件进行预处理,产出hello.i文件(由于这个文件不可以直接看到的,所以我对指令增加了重定向>
  2. 编译:执行gcc -S hello.cpp对.cpp文件进行编译,将高级语言转换成汇编语言,产出hello.s文件
  3. 汇编:执行gcc -c hello.cpp将汇编指令转换成机器语言,产出hello.o目标文件(二进制)
  4. 链接:执行gcc hello.cpp -o hello将一个或多个由编译器或汇编器生成的目标文件和外部库链接为一个可执行文件,产出hello.exe文件

C/C++编译过程

静态库

是一个外部函数与变量的集合体。静态库的文件内容,其内容不像动态链接库那么复杂,在编译期间由编译器与链接器将它直接集成至应用程序内,并产出目标文件以及可以独立运作的可执行文件。Windows下静态库库为.lib后缀,在linux下为.a后缀。

动态库

是一个包含可由多个程序同时使用的代码和数据的库。DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数,并且允许进程可以共享调用。Windows下动态库为.dll后缀,在linux下为.so后缀。
由于C/C++的语言特性,所有的函数必须先声明再调用,所有单纯的动态库是无法被直接调用的,而导出库的作用就是用来包含动态库中所有的的函数声明。导出库虽然与静态库都是.lib文件,但是二者内容并不相同。

区别

相比于静态库直接集成到应用程序中,动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,不使用的时候再从内存释放。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。

Visual Studio引入

在VS工程中,在C/C++工程中引入外部库的基本步骤:

  1. 配置所有:右键工程根目录→ 属性 → 最上面修改为“所有配置”、“所有平台”
  2. 添加头文件目录:右键工程根目录→ 属性 → C/C++ → 常规 → 附加包含目录,添加include目录。
  3. 添加lib静态库:右键工程根目录 → 属性 → 链接器 → 常规 → 附加库目录,添加lib目录。
    添加工程引用的lib文件名:工程 → 属性 → 链接器 → 输入 → 附加依赖项:输入lib文件名。
    注意:有时候lib下并非实际的静态库,针对不同版本还要继续找在这里插入图片描述
  4. 添加dll动态库:把引用的dll放到工程的可执行文件所在目录即可。

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

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

相关文章

[G星计划]--项目开发总结

第一轮:Dr.Mech 参加了为期7天的第一轮DEMO竞赛,最佳团队,总结一下开发过程中的一些要点。 问题: 关于项目时间安排,由于项目核心代码量并不算太多,所以前几天还是比较从容的,不过这也导致许多…

在2020年学习cocos游戏引擎

常用链接 Cocos2d-x 用户手册 参考书目 《Cocos2d-X游戏开发实战精解》 《我所理解的Cocos2d-x》 《Effective C》中文版第三版 环境搭建 macOS 10.15.6 Xcode 11.5 cocos2d-x 3.17.2 cmake 3.17.3 创建工程 采用cocos2d-x 3.17版本可直接通过cocos console创建&#xf…

[源码学习]--UGUI

学习参考 从bitbucket上获取uGUI 2019.1源码 UGUI内核大探究 事件系统 UnityEngine.UI/EventSystem/EventSystem.cs private List<BaseInputModule> m_SystemInputModules new List<BaseInputModule>(); // 系统输入模块列表 private BaseInputModule m_Curr…

PureMVC在Unity游戏开发中的应用

作为开发人员&#xff0c;我们都想写出优雅的代码&#xff0c;可又苦于自身能力不知该如何下手&#xff0c;而框架的作用正在与能够让你规范的去开发。 之前写Web的时候&#xff0c;总被要求采用MVC架构&#xff0c;的确非常好用&#xff0c;也从来没有质疑过这种架构的好与不好…

Unity资源管理--AssetBundle学习

Unity资源目录 当用Unity创建一个工程的时候&#xff0c;目录如下&#xff1a; Assets&#xff1a;存放Unity工程实际的资源目录。 Library&#xff1a;存放Unity处理完毕的资源&#xff0c;由unity自动转化生成。 Log&#xff1a;存放日志文件。 Packages&#xff1a;统一管…

[读书笔记] 设计模式与游戏完美开发

最近在看《设计模式与游戏完美开发》&#xff0c;文章将记录一些要点和一些设计模式实现 GoF定义的23种设计模式及应用场景 系统设计可以采用的设计模式&#xff1a;单例、状态&#xff08;场景切换&#xff09;、外观&#xff08;保证高内聚&#xff09;、中介者&#xff08…

iOS开发——GPUImage源码解析

一、基本概念 GPUImage&#xff1a;一个开源的、基于openGL的图片或视频的处理框架&#xff0c;其本身内置了多达120多种常见的滤镜效果&#xff0c;并且支持照相机和摄像机的实时滤镜&#xff0c;并且能够自定义图像滤镜。同时也很方便在原有基础上加入自己的滤镜Filter&#…

[读书笔记] 敏捷软件开发:原则、模式与实践

关于面向对象编程的一些理解&#xff0c;这本书主要看六大原则的部分&#xff0c;书中关于设计模式的内容由于之前的那本《设计模式与游戏完美开发》已经很好的讲解了游戏开发领域的应用&#xff0c;所以不多关注。 面向对象的六大原则 单一职责原则SRP&#xff1a;一个类应该…

Caffe-SSD相关源码说明和调试记录

1 对Blob的理解及其操作&#xff1a; Blob是一个四维的数组。维度从高到低分别是: (num_&#xff0c;channels_&#xff0c;height_&#xff0c;width_) 对于图像数据来说就是&#xff1a;图片个数&#xff0c;彩色通道个数&#xff0c;宽&#xff0c;高 Blob中数据是row-…

[游戏策划] 读书笔记

交互式媒体最有趣的地方在于&#xff0c;它让玩家直面问题&#xff0c;思考、尝试各种解决方案&#xff0c;并体验各种解决方案的结果。然后玩家可以回到思考阶段&#xff0c;规划下一步行动。这种反复试错的过程中&#xff0c;玩家的脑海里就会构建出一个互动的世界。 [读书笔…

ECS框架学习

DOTS Unity DOTS是Unity官方基于ECS架构开发的一套包含Burst编辑器和JobSystem的技术栈&#xff0c;它旨在充分利用多核处理器的特点&#xff0c;充分发挥ECS的优势。 安装 Entities、Burst、Jobs、Hybrid Renderer&#xff08;必选&#xff0c;用于DOTS的渲染相关&#xf…

辅助排序和Mapreduce整体流程

一、辅助排序 需求&#xff1a;先有一个订单数据文件&#xff0c;包含了订单id、商品id、商品价格&#xff0c;要求将订单id正序&#xff0c;商品价格倒序&#xff0c;且生成结果文件个数为订单id的数量&#xff0c;每个结果文件中只要一条该订单最贵商品的数据。 思路&#xf…

[读书笔记] 史玉柱自述:我的营销心得

与下属的关系 从玩家角度设定目标 目标感的设计 论随机性 在前15分钟留住玩家 实际观察玩家对于游戏的翻译反应 好游戏是改出来的 注重细节 决策民主、责任人制度 论简单与复杂的关系 游戏经济中的投放与回收 避免进入降低压力的怪圈 创业初期的股份分配 单个行业…

记一次面试腾讯的奇葩经历

阅读本文大概需要 2.8 分钟。 作者&#xff1a;黄小斜 文章来源&#xff1a;微信公众号【程序员江湖】 ​ 上回说到&#xff0c;我腾讯面试出师不利&#xff0c;简历随即进入备胎池&#xff0c;不过没过多久&#xff0c;转机还是来了。 大概是一周之后&#xff0c;我的电话响起…

foot

码云链接&#xff1a;https://gitee.com/zyyyyyyyyyyy/codes/rcfdzmin4a82v975pl1ko47 效果图&#xff1a; 原网站截图&#xff1a; 源代码&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"><title></title><s…

Taro项目遇到的问题

1. https://taro-ui.aotu.io/#/docs/questions 请在Taro项目根目录找到 config/index.js 文件中的h5项&#xff0c;添加如下&#xff1a; h5: {...esnextModules: [taro-ui] } 2. 原则&#xff1a;少什么就装什么 少了 babel-plugin-transform-decorators-legacy &#xff0c;那…

严重: StandardServer.await: create[localhost:8005]

①看看任务管理器&#xff0c;是否打开了多个Tomcat程序 如果是&#xff0c;关闭其中一个 ②可能是端口冲突 1、将tomcat安装目录下的conf/server.xml中的8005端口号改为其它的端口号。&#xff08;不建议&#xff0c;因为会衍生出其他错误&#xff09; 2、将正在使用的8005端…

java里short,int,long,float,double范围及可写位数

一、取值范围 1、int二进制位数&#xff1a;32 包装类&#xff1a;java.lang.Integer最小值&#xff1a;Integer.MIN_VALUE -2147483648 &#xff08;-2的31次方&#xff09;最大值&#xff1a;Integer.MAX_VALUE 2147483647 &#xff08;2的31次方-1&#xff09;2、short 二…

第六周编程总结

6-1 求两数平方根之和 &#xff08;10 分) 函数fun的功能是&#xff1a;求两数平方根之和&#xff0c;作为函数值返回。例如&#xff1a;输入12和20&#xff0c;输出结果是&#xff1a;y 7.936238。 函数接口定义&#xff1a; double fun (double a, double b); 其中 a和 b是用…