当前位置: 首页 > news >正文

< IDE编程环境配置>

IDE编程环境配置

LIB,DLL区别

我们在写项目时会链接(调用)第3方库,或者比如在vs的解决方案solution创建项目project时,不仅可以开发可执行程序exe(可单独运行)(windows/控制台 应用程序),也可以开发自定义库(不可单独运行,只能在应用程序被调用)(DLL动态库,LIB静态库)

库是一个二进制文件,包含了源文件中(.cpp 或 .c),头文件相反,头文件仅包含声明信息

静态库(.lib静态库文件)

静态库存储了实际的数据和函数

当编译器链接库时,会从库中复制这些函数,并和我们的应用程序一起组合为exe可执行文件,最终的可执行文件exe会比较大

发布时仅发布这个可执行文件就行

静态链接库中不能再包含其他的动态链接库或者静态库

动态库(.dll动态库文件)辅助文件:(lib引入库/导入库文件)

引入库文件(.LIB)包含DLL导出的函数和变量的符号名,而.DLL文件包含该DLL实际的函数和数据

编译时仅需要链接LIB引入库文件,DLL中的函数代码和数据并不可复制到可执行文件

运行时,会根据LIB的地址符号表,从DLL库查找导出的函数

发布时不仅要发布这个可执行文件,也要发布DLL动态库文件

动态链接库中还可以再包含其他的动态或静态链接 库

优点:

内存优化:只有exe调用了函数时,才会被加载到内存中,从而可以减少exe文件的大小

代码共享/模块化/跨平台兼容性/插件支持:因为并非像静态库一样被复制到exe中,而是调用了什么什么就被加载,因此有较高的灵活性

LIB,DLL库配置

DLL

使用时只能使用dll中导出的函数,未导出的函数只能在dll内部使用

隐式连接

需要三个文件

*.h头文件

需要include 包含导出函数的头文件

  • 可以直接写绝对路径
  • 可以拷贝到src源码目录下
  • 也可以配置项目属性,VC++目录->包含目录,或者,C/C++->常规->附加包含目录
lib引入库
  • 可以添加到项目project中,确保选中目标项目,选中要添加的库:”添加”–>”现有项”–>选择lib文件
  • 可以配置项目属性,链接器->常规->附加库目录,然后,链接器->输入->附加依赖项(库名)
DLL库
  • 直接拷贝,将dll拷贝到运行时目录,与调用者exe文件在同一目录
  • 可以配置项目属性,VC++目录->可执行目录,并且,调试 ->工作目录

LIB

*.h头文件

.lib静态库

……和上述一样

DLL库使用

我们要手动控制dll中函数哪些被导出,哪些仅在内部使用,

并且是被导出还是导入,在生成dll的时候我们希望导出,在使用dll时则时希望导入符号

__declspec关键字可以作用于,类,函数,变量

_declspec(dllimport) 导入

 __declspec(dllexport)导出

使用时通常通过宏,如果项目定义了DLLEXPORT导出宏,那么宏_DLL_DECLARE_ 即为导出

否则_DLL_DECLARE_为导入

#ifdef DLLEXPORT
#define _DLL_DECLARE_ declspec(dllexport)
#else
#define _DLL_DECLARE_ declspec(dllimport)

名词

编译器:可以完成从预编译编译,汇编,链接整个过程,将高级编程语言(如C、C++、Java等)编写的源代码转换为机器语言,使得高级语言编写的文件能够被计算机执行

  • 编译器执行过程:
  • 预编译(Preprocessing)
  • 使用g++的-E选项将hello.cpp和包含的头文件预编译为hello.i
  • 编译(Compilation)
  • 使用g++-S选项将hello.i编译为汇编代码文件hello.s
  • 汇编(Assembly)
  • 使用g++-c选项将hello.s汇编为目标文件hello.o(翻译为机器指令)
  • 链接(Linking)
  • 使用g++hello.o链接为可执行文件hello.exe
g++ main.cpp -o main

IDE(Integrated Development Environment)集成开发环境:它集成了代码编辑器、编译器、调试器、图形用户界面工具等多种功能,使得开发者可以在一个统一的界面中完成代码编写、编译(例如vs中的build构建)、调试、运行等所有开发任务。

GNU:操作系统,包含GCC(编译器),Linux内核,和其他的GNU工具集(Emacs编辑器,GDB调试器等)

GCC(GNU Compiler Collection,GNU编译器集合)编译器:支持多种编程语言(如C、C++、Objective-C、Fortran等)和多种计算机体系结构(如x86、ARM等)GCC/G++编译器:GCC专门编译C语言,G++专门编译C++语言

MSVC(Microsoft Visual C++)编译器:微软公司开发专有的C++编译器,提供了丰富的库和工具来支持Windows平台的应用程序开发,被Visual Studio IDE所集成

MinGW(Minimalist GNU for Windows)编译器:包括GCC编译器和适用于Windows的头文件和库,开源,跨平台性

运行时库:支持程序运行的基本函数的集合,一般是静态库lib或动态库dll。

SDK:软件开发工具包

构建工具:

对于大型项目,手动列出所有源文件编译,可能会变得繁琐且容易出错,为了防止每次编译都要执行大量的命令,我们使用构建工具,

负责整个项目的构建过程,包括调用编译器、链接器、测试框架等,它们通常会读取项目配置文件(如Makefile、CMakeLists.txt、Premake脚本等),这些文件定义了项目的结构、依赖关系、构建步骤等,然后调用系统编译器进行项目构建

这样只用使用make等命令,就可以编译链接项目配置文件里配置的文件了

make构建工具:适合简单的、不需要跨平台的项目构建,

Cmake构建工具:跨平台,自定义语言,适合需要跨平台支持的大型项目,提供了丰富的功能和更好的可维护性。

Premake构建工具,跨平台,lua语言,提供了高度的灵活性和可扩展性,适用于各种规模和复杂度的项目。

在Window通过命令行使用MSVC编译C++项目

编译:

在window系统中,包含MinGW和MSVC编译器,如果想要使用MSVC,首先应下载(Visual Studio Installer,再选择单个组件(MSVC和SDK)安装)

然后配置Path环境变量,这样我们就可以使用MSVC编译器了

这时使用cl main.cpp(文件名),命令,就可以编译为exe文件了

运行:

通过执行main.exe就可以运行了

在Window通过vscodeIDE编译C++项目

相关文章:

< IDE编程环境配置>

IDE编程环境配置 LIB,DLL区别 我们在写项目时会链接(调用)第3方库,或者比如在vs的解决方案solution创建项目project时,不仅可以开发可执行程序exe(可单独运行)(windows/控制台 应用…...

Golang | Leetcode Golang题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; func findDisappearedNumbers(nums []int) (ans []int) {n : len(nums)for _, v : range nums {v (v - 1) % nnums[v] n}for i, v : range nums {if v < n {ans append(ans, i1)}}return }...

【Spring Boot 入门三】Spring Boot与数据库集成 - 构建数据驱动的应用

一、引言 在之前的文章中&#xff0c;我们已经对Spring Boot有了初步的认识&#xff0c;了解了如何构建第一个Spring Boot应用&#xff0c;以及如何通过配置文件来掌控应用的设置。这些知识为我们进一步探索Spring Boot与数据库的集成奠定了坚实的基础。 数据库是现代应用的核…...

Web 服务器与动态脚本语言通信的接口协议有哪些

Web 服务器与动态脚本语言通信的接口协议主要有以下几种&#xff1a; 一、FastCGI&#xff08;Fast Common Gateway Interface&#xff09; 特点&#xff1a;使用持久进程处理请求&#xff0c;减少了进程启动和关闭的开销&#xff0c;提高了性能和可扩展性。多个请求可由同一个…...

ESXI识别服务器磁盘,虚拟机显示无效

ESXI识别服务器磁盘&#xff0c;虚拟机显示无效 系统意外断电识别不到磁盘的情况下可以管理-》硬件-》搜索磁盘名称&#xff0c;选择切换直通&#xff0c;则虚拟机正常。...

【C++】 vector 迭代器失效问题

【C】 vector 迭代器失效问题 一. 迭代器失效问题分析二. 对于vector可能会导致其迭代器失效的操作有&#xff1a;1. 会引起其底层空间改变的操作&#xff0c;都有可能是迭代器失效2. 指定位置元素的删除操作--erase3. Linux下&#xff0c;g编译器对迭代器失效的检测并不是非常…...

【Spring基础3】- Spring的入门程序

目录 3-1 Spring的下载3-2 Spring的 jar 包3-3 第一个 Spring程序第一步&#xff1a;添加spring context的依赖&#xff0c;pom.xml配置如下第二步&#xff1a;添加junit依赖第三步&#xff1a;定义bean&#xff1a;User第四步&#xff1a;编写spring的配置文件&#xff1a;bea…...

golang学习笔记22-面向对象(四):接口【重要】

本节也是GO核心部分&#xff0c;很重要。 注&#xff1a;由于导包语句已经在19讲&#xff08;笔记19&#xff1a;面向对象的引入&#xff09;展示过了&#xff0c;所以这里就不展示了。 一、定义与实现 (1)接口中可以定义一组方法&#xff0c;但不需要实现&#xff0c;不需要…...

SpringBoot技术栈:打造下一代网上租赁系统

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…...

Vue-Lecture1-Notes

渐进式框架 Vue 被称为“渐进式框架”&#xff0c;是因为它允许开发者根据项目的需求逐步引入和使用其功能&#xff0c;而不需要一次性使用整个框架。简单来说&#xff0c;Vue 提供了从简单到复杂的功能层次&#xff0c;可以灵活选择使用。 按需使用&#xff1a;Vue 的核心功能…...

网上租赁系统开发:SpringBoot实践与应用

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…...

User-Agent在WebMagic爬虫中的重要性

对于需要从网站上抓取数据的开发者来说&#xff0c;WebMagic是一个强大的工具。它是一个简单灵活的Java爬虫框架&#xff0c;用于抓取网页数据。在爬虫技术中&#xff0c;User-Agent&#xff08;用户代理&#xff09;是一个关键的HTTP请求头&#xff0c;它告诉服务器关于客户端…...

如何解决 Docker 下载 mcr.microsoft.com 镜像慢的办法

一、介绍 MCR(Miscrosoft Container Registry) 加速器&#xff0c;助你在中国大陆急速下载 netcore 相关的 docker 镜像。二、解决办法。     1、如何使用       至少三种方法进行加速&#xff1a;         使用 docker-mcr &#xff08;推荐&#xff09;  …...

网络编程,端口号,网络字节序,udp

前面一篇我们讲了网络的基础&#xff0c;网络协议栈是什么样的&#xff0c;数据如何流动传输的&#xff1b;接下来这篇&#xff0c;我们将进行实践操作&#xff0c;真正的让数据跨网络进行传输&#xff1b; 1.网络编程储备知识 1.1 初步认识网络编程 首先我们需要知道我们的…...

Android入门

下载Android studio&#xff0c;创建第一个项目 模板可以选择empty views Activity 在这个界面可以修改&#xff0c;使用语言&#xff0c;项目名字&#xff0c;存储路径以及适用版本 完成后&#xff0c;得到一个最初始的Android 项目&#xff0c;红色标记的两个文件&#xf…...

二叉树深搜专题篇

目录 计算布尔二叉树的值 求根节点到叶节点数字之和 二叉树剪枝 验证二叉搜索树 二叉搜索树中第K小的元素 二叉树的所有路径 计算布尔二叉树的值 题目 思路 这道题其实是比较简单的&#xff0c;对二叉树来一次后序遍历即可&#xff0c;当遇到叶子结点直接返回叶子节点中…...

堆【数据结构C语言版】【 详解】

目录-笔记整理 一、思考二、堆概念与性质三、堆的构建、删除、添加1. 构建2. 删除3. 添加 四、复杂度分析4.1 时间复杂度4.2 空间复杂度 五、总结 一、思考 设计一种数据结构&#xff0c;来存放整数&#xff0c;要求三个接口&#xff1a; 1&#xff09;获取序列中的最值&#…...

初识React

在最新写需求的时候&#xff0c;我遇到了一个需求&#xff0c;这个需求改后端改的不算多&#xff0c;而且也比较简单&#xff0c;但是在改前端的时候&#xff0c;很复杂。因为我们这个项目用的是React做前端的&#xff0c;而我对于前端知识没有了解&#xff0c;所以理解很多代码…...

VUE 开发——AJAX学习(三)

一、async函数和await async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为&#xff0c;而无需刻意地链式调用Promise async写在函数声明的前面&#xff1b;在async函数内&#xff0c;使用await关键字&#xff0c;获取Promise对象“成功状态”结果值 &…...

C++杂项

作业&#xff1a; 将之前实现的顺序表、栈、队列都更改成模板类 顺序表 #include <iostream>using namespace std;template<typename T>class SeqList { private:T *ptr;int size; //总长度int len 0; //当前顺序表实际长度public://初始…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...